From Fedora Project Wiki
(Created page with "== Koji Content Generator Metadata Proposal == This document describes the proposed Koji Content Generator Metadata Format (version 0). This is the metadata that should be p...")
 
No edit summary
Line 3: Line 3:
This document describes the proposed Koji Content Generator Metadata Format (version 0).  This is the metadata that should be provided by a Content Generator in order for the content to be imported and managed by Koji.  If you have further questions about [[Koji/ContentGenerators|Content Generators]], please email koji-devel@lists.fedorahosted.org.
This document describes the proposed Koji Content Generator Metadata Format (version 0).  This is the metadata that should be provided by a Content Generator in order for the content to be imported and managed by Koji.  If you have further questions about [[Koji/ContentGenerators|Content Generators]], please email koji-devel@lists.fedorahosted.org.


== Format ==
Content Generator Metadata for a single build is provided as a JSON map.  The map has four top-level entries:
Content Generator Metadata for a single build is provided as a JSON map.  The map has four top-level entries:


* metadata_version: The version of the metadata format used.  Currently must be 0.
* metadata_version: The version of the metadata format used.  Currently must be 0.
* build: A map containing information about the build.
* build: A map containing information about the build.
* buildroot: A map containing information about the environment in which the build ran.
* buildroots: A list of maps, one for each environment in which build output was generated, containing information about that environment.
* output: A list of maps, one map for each file that will be imported and managed by Brew.
* output: A list of maps, one map for each file that will be imported and managed by Brew.


=== build ===
The build map contains the following entries:
The build map contains the following entries:


Line 19: Line 21:
* end_time: The time the build was completed, in seconds since the epoch.
* end_time: The time the build was completed, in seconds since the epoch.


The buildroot map contains the following entries:
Each map in the buildroots list contains the following entries:


* host: Map containing information about the host where the build was run.
* host: Map containing information about the host where the build was run.
Line 81: Line 83:
           'start_time': 1423148398,
           'start_time': 1423148398,
           'end_time': 1423148828},
           'end_time': 1423148828},
  'buildroot': [{'id': 1,
  'buildroots': [{'id': 1,
                'host': {'os': 'rhel-7',
                'host': {'os': 'rhel-7',
                        'arch': 'x86_64'},
                          'arch': 'x86_64'},
                'content_generator': {'name': 'osbs',
                'content_generator': {'name': 'osbs',
                                      'version': '0.2'},
                                      'version': '0.2'},
                'container': {'type': 'docker',
                'container': {'type': 'docker',
                              'arch': 'x86_64'},
                              'arch': 'x86_64'},
                'tools': [{'name': 'docker',
                'tools': [{'name': 'docker',
                          'version': '1.5.0'}],
                            'version': '1.5.0'}],
                'component_rpms': [{'name': 'glibc',
                'component_rpms': [{'name': 'glibc',
                                    'version': '2.17'
                                    'version': '2.17'
                                    'release': '75.el7',
                                    'release': '75.el7',
                                    'epoch': None,
                                    'epoch': None,
                                    'arch': 'x86_64',
                                    'arch': 'x86_64',
                                    'sigmd5': 'a1b2c3...',
                                    'sigmd5': 'a1b2c3...',
                                    'signature': 'fd431d51'},
                                    'signature': 'fd431d51'},
                                  {'name': 'openssl',
                                    {'name': 'openssl',
                                    'version': '1.0.1e',
                                    'version': '1.0.1e',
                                    'release': '42.el7',
                                    'release': '42.el7',
                                    'epoch': None,
                                    'epoch': None,
                                    'arch': 'x86_64',
                                    'arch': 'x86_64',
                                    'sigmd5': 'd4e5f6...',
                                    'sigmd5': 'd4e5f6...',
                                    'signature': 'fd431d51'},
                                    'signature': 'fd431d51'},
                                  {'name': 'bind-libs',
                                    {'name': 'bind-libs',
                                    'version': '9.9.4',
                                    'version': '9.9.4',
                                    'release': 18.el7',
                                    'release': 18.el7',
                                    'epoch': 32,
                                    'epoch': 32,
                                    'arch': 'x86_64',
                                    'arch': 'x86_64',
                                    'sigmd5': '987abc...',
                                    'sigmd5': '987abc...',
                                    'signature': None},
                                    'signature': None},
                                  {'name': 'python-urllib3',
                                    {'name': 'python-urllib3',
                                    'version': '1.5',
                                    'version': '1.5',
                                    'release': '8.el7',
                                    'release': '8.el7',
                                    'epoch': None,
                                    'epoch': None,
                                    'arch': 'noarch',
                                    'arch': 'noarch',
                                    'sigmd5': '123hgf...',
                                    'sigmd5': '123hgf...',
                                    'signature': None}],
                                    'signature': None}],
                'component_archives': [{'filename': 'jboss-eap-6.3.3-full-build.zip',
                'component_archives': [{'filename': 'jboss-eap-6.3.3-full-build.zip',
                                        'filesize': 12345678,
                                        'filesize': 12345678,
                                        'checksum': '5ec2f29c4e1c2e2aa6552836e236a158',
                                        'checksum': '5ec2f29c4e1c2e2aa6552836e236a158',
                                        'checksum_type': 'md5'}],
                                        'checksum_type': 'md5'}],
                'extra': {'docker': [{'filename': 'rhel-server-docker-7.1-4.x86_64.tar.xz',
                'extra': {'docker': [{'filename': 'rhel-server-docker-7.1-4.x86_64.tar.xz',
                                      'id': '987654...',
                                      'id': '987654...',
                                      'parent_id': 'a1b2c3...',
                                      'parent_id': 'a1b2c3...',
                                      'destination_repo': 'foo-repo',
                                      'destination_repo': 'foo-repo',
                                      'tag': 'test-tag'}],
                                      'tag': 'test-tag'}],
                          'osbs': {'build_id': 12345,
                          'osbs': {'build_id': 12345,
                                  'builder_image_id': 67890}}
                                    'builder_image_id': 67890}}
                        }],
                          }],
'output': [{'buildroot_id': 1,
'output': [{'buildroot_id': 1,
             'filename': 'rhel-server-docker-7.1-4.x86_64.tar.xz',
             'filename': 'rhel-server-docker-7.1-4.x86_64.tar.xz',

Revision as of 18:50, 5 June 2015

Koji Content Generator Metadata Proposal

This document describes the proposed Koji Content Generator Metadata Format (version 0). This is the metadata that should be provided by a Content Generator in order for the content to be imported and managed by Koji. If you have further questions about Content Generators, please email koji-devel@lists.fedorahosted.org.

Format

Content Generator Metadata for a single build is provided as a JSON map. The map has four top-level entries:

  • metadata_version: The version of the metadata format used. Currently must be 0.
  • build: A map containing information about the build.
  • buildroots: A list of maps, one for each environment in which build output was generated, containing information about that environment.
  • output: A list of maps, one map for each file that will be imported and managed by Brew.

build

The build map contains the following entries:

  • name: The name of the build.
  • version: The version of the build.
  • release: The release of the build.
  • source: The SCM URL of the sources used in the build.
  • start_time: The time the build started, in seconds since the epoch.
  • end_time: The time the build was completed, in seconds since the epoch.

Each map in the buildroots list contains the following entries:

  • host: Map containing information about the host where the build was run.
    • os: The operating system that was running on the host.
    • arch: The processor architecture of the host.
  • content_generator: Map containing information about the Content Generator which ran the build.
    • name: The short name of the Content Generator.
    • version: The version of the Content Generator.
  • container: Map containing information about the container in which the build was run.
    • type: The type of container that was used, eg. none, directory, chroot, mock-chroot, kvm, docker
    • arch: The architecture of the container. May be different than the architecture of the host, eg. i686 container on x86_64 host.
  • tools: List of maps containing information about the tools used to run the build. Each map contains:
    • name: Name of the tool used.
    • version: Version of the tool used.
  • component_rpms: List of maps containing information about the rpms installed in the build environment (if any). Each map contains:
    • name: The rpm name.
    • version: The rpm version.
    • release: The rpm release.
    • epoch: The rpm epoch.
    • arch: The rpm arch.
    • sigmd5: The SIGMD5 tag from the rpm header.
    • signature: The signature used to sign the rpm (if any).
  • component_archives: List of maps containing information about the non-rpm content installed in the build environment (if any). Each map contains:
    • filename: The name of the file.
    • filesize: The size of the file.
    • checksum: The checksum of the file.
    • checksum_type: The checksum type used.
  • extra: A map containing information specific to the Content Generator that produced the files to import.

Each map in the output list contains the following entries:

  • filename: The name of the file.
  • filesize: The size of the file.
  • arch: The architecture of the file (if applicable).
  • checksum: The checksum of the file.
  • checksum_type: The checksum type used.
  • type: The type of the file. Log files should use "log".

The extra map is free-form, but should contain IDs that allow tracking the output back to the system in which it was generated (if that system retains a record of output).

For docker, the extra map should contain a docker entry, which is a list of maps, one for each docker image produced. Each map should have the following fields:

  • filename: The filename of the docker image archive
  • id: The ID of the docker image produced in the repo used by the build tool
  • parent_id: The parent ID of the docker image produced (if applicable).
  • destination_repo: The destination repo of the docker image was delivered to.
  • tag: The tag applied to the docker image in the destination repo.

For OSBS, the extra map should contain a osbs entry, which is a map with the following fields:

  • build_id: The ID of the build in OSBS.
  • builder_image_id: The ID of the image in OSBS that was used to run the build.

Example (based loosely on the output of a docker image build)

{'metadata_version': 0,
 'build': {'name': 'rhel-server-docker',
           'version': '7.1',
           'release': '4',
           'source': 'git://git.engineering.redhat.com/users/vpavlin/tdl_templates.git#a14f145244',
           'start_time': 1423148398,
           'end_time': 1423148828},
 'buildroots': [{'id': 1,
                 'host': {'os': 'rhel-7',
                          'arch': 'x86_64'},
                 'content_generator': {'name': 'osbs',
                                       'version': '0.2'},
                 'container': {'type': 'docker',
                               'arch': 'x86_64'},
                 'tools': [{'name': 'docker',
                            'version': '1.5.0'}],
                 'component_rpms': [{'name': 'glibc',
                                     'version': '2.17'
                                     'release': '75.el7',
                                     'epoch': None,
                                     'arch': 'x86_64',
                                     'sigmd5': 'a1b2c3...',
                                     'signature': 'fd431d51'},
                                    {'name': 'openssl',
                                     'version': '1.0.1e',
                                     'release': '42.el7',
                                     'epoch': None,
                                     'arch': 'x86_64',
                                     'sigmd5': 'd4e5f6...',
                                     'signature': 'fd431d51'},
                                    {'name': 'bind-libs',
                                     'version': '9.9.4',
                                     'release': 18.el7',
                                     'epoch': 32,
                                     'arch': 'x86_64',
                                     'sigmd5': '987abc...',
                                     'signature': None},
                                    {'name': 'python-urllib3',
                                     'version': '1.5',
                                     'release': '8.el7',
                                     'epoch': None,
                                     'arch': 'noarch',
                                     'sigmd5': '123hgf...',
                                     'signature': None}],
                 'component_archives': [{'filename': 'jboss-eap-6.3.3-full-build.zip',
                                         'filesize': 12345678,
                                         'checksum': '5ec2f29c4e1c2e2aa6552836e236a158',
                                         'checksum_type': 'md5'}],
                 'extra': {'docker': [{'filename': 'rhel-server-docker-7.1-4.x86_64.tar.xz',
                                       'id': '987654...',
                                       'parent_id': 'a1b2c3...',
                                       'destination_repo': 'foo-repo',
                                       'tag': 'test-tag'}],
                           'osbs': {'build_id': 12345,
                                    'builder_image_id': 67890}}
                          }],
'output': [{'buildroot_id': 1,
            'filename': 'rhel-server-docker-7.1-4.x86_64.tar.xz',
            'filesize': 34440656,
            'arch': 'x86_64',
            'checksum_type': 'md5',
            'checksum': '275ae42a45cfedbdb0c0a1acc0b55a1b',
            'type': 'image',
            'component_rpms': ...,
            'component_archives': ...,
           {'buildroot_id': 1,
            'filename': 'checkout.log',
            'filesize': 85724,
            'arch': 'noarch',
            'checksum_type': 'md5',
            'checksum': 'a1b2c3...',
            'type': 'log'},
           {'buildroot_id': 1,
            'filename': 'os-indirection.log',
            'filesize': 27189,
            'arch': 'noarch',
            'checksum_type': 'md5',
            'checksum': 'd4f5g6...',
            'type': 'log'}]

}