flatpak-builder/common/flatpak-json-oci.h

276 lines
9.6 KiB
C

/*
* Copyright © 2016 Red Hat, Inc
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*
* Authors:
* Alexander Larsson <alexl@redhat.com>
*/
#ifndef __FLATPAK_JSON_OCI_H__
#define __FLATPAK_JSON_OCI_H__
#include "flatpak-json.h"
G_BEGIN_DECLS
#define FLATPAK_OCI_MEDIA_TYPE_DESCRIPTOR "application/vnd.oci.descriptor.v1+json"
#define FLATPAK_OCI_MEDIA_TYPE_IMAGE_MANIFEST "application/vnd.oci.image.manifest.v1+json"
#define FLATPAK_OCI_MEDIA_TYPE_IMAGE_INDEX "application/vnd.oci.image.index.v1+json"
#define FLATPAK_OCI_MEDIA_TYPE_IMAGE_LAYER "application/vnd.oci.image.layer.v1.tar+gzip"
#define FLATPAK_OCI_MEDIA_TYPE_IMAGE_LAYER_NONDISTRIBUTABLE "application/vnd.oci.image.layer.nondistributable.v1.tar+gzip"
#define FLATPAK_OCI_MEDIA_TYPE_IMAGE_CONFIG "application/vnd.oci.image.config.v1+json"
#define FLATPAK_OCI_SIGNATURE_TYPE_FLATPAK "flatpak oci image signature"
const char * flatpak_arch_to_oci_arch (const char *flatpak_arch);
void flatpak_oci_export_annotations (GHashTable *source,
GHashTable *dest);
void flatpak_oci_copy_annotations (GHashTable *source,
GHashTable *dest);
typedef struct {
char *mediatype;
char *digest;
gint64 size;
char **urls;
GHashTable *annotations;
} FlatpakOciDescriptor;
FlatpakOciDescriptor *flatpak_oci_descriptor_new (const char *mediatype,
const char *digest,
gint64 size);
void flatpak_oci_descriptor_copy (FlatpakOciDescriptor *source,
FlatpakOciDescriptor *dest);
void flatpak_oci_descriptor_destroy (FlatpakOciDescriptor *self);
void flatpak_oci_descriptor_free (FlatpakOciDescriptor *self);
G_DEFINE_AUTOPTR_CLEANUP_FUNC (FlatpakOciDescriptor, flatpak_oci_descriptor_free)
typedef struct
{
char *architecture;
char *os;
char *os_version;
char **os_features;
char *variant;
char **features;
} FlatpakOciManifestPlatform;
typedef struct
{
FlatpakOciDescriptor parent;
FlatpakOciManifestPlatform platform;
} FlatpakOciManifestDescriptor;
FlatpakOciManifestDescriptor * flatpak_oci_manifest_descriptor_new (void);
const char * flatpak_oci_manifest_descriptor_get_ref (FlatpakOciManifestDescriptor *m);
void flatpak_oci_manifest_descriptor_destroy (FlatpakOciManifestDescriptor *self);
void flatpak_oci_manifest_descriptor_free (FlatpakOciManifestDescriptor *self);
#define FLATPAK_TYPE_OCI_VERSIONED flatpak_oci_versioned_get_type ()
G_DECLARE_FINAL_TYPE (FlatpakOciVersioned, flatpak_oci_versioned, FLATPAK_OCI, VERSIONED, FlatpakJson)
struct _FlatpakOciVersioned {
FlatpakJson parent;
int version;
char *mediatype;
};
struct _FlatpakOciVersionedClass {
FlatpakJsonClass parent_class;
};
FlatpakOciVersioned *flatpak_oci_versioned_from_json (GBytes *bytes,
GError **error);
const char * flatpak_oci_versioned_get_mediatype (FlatpakOciVersioned *self);
gint64 flatpak_oci_versioned_get_version (FlatpakOciVersioned *self);
#define FLATPAK_TYPE_OCI_MANIFEST flatpak_oci_manifest_get_type ()
G_DECLARE_FINAL_TYPE (FlatpakOciManifest, flatpak_oci_manifest, FLATPAK, OCI_MANIFEST, FlatpakOciVersioned)
struct _FlatpakOciManifest
{
FlatpakOciVersioned parent;
FlatpakOciDescriptor config;
FlatpakOciDescriptor **layers;
GHashTable *annotations;
};
struct _FlatpakOciManifestClass
{
FlatpakOciVersionedClass parent_class;
};
FlatpakOciManifest *flatpak_oci_manifest_new (void);
void flatpak_oci_manifest_set_config (FlatpakOciManifest *self,
FlatpakOciDescriptor *desc);
void flatpak_oci_manifest_set_layers (FlatpakOciManifest *self,
FlatpakOciDescriptor **descs);
void flatpak_oci_manifest_set_layer (FlatpakOciManifest *self,
FlatpakOciDescriptor *desc);
int flatpak_oci_manifest_get_n_layers (FlatpakOciManifest *self);
const char * flatpak_oci_manifest_get_layer_digest (FlatpakOciManifest *self,
int i);
GHashTable * flatpak_oci_manifest_get_annotations (FlatpakOciManifest *self);
#define FLATPAK_TYPE_OCI_INDEX flatpak_oci_index_get_type ()
G_DECLARE_FINAL_TYPE (FlatpakOciIndex, flatpak_oci_index, FLATPAK, OCI_INDEX, FlatpakOciVersioned)
struct _FlatpakOciIndex
{
FlatpakOciVersioned parent;
FlatpakOciManifestDescriptor **manifests;
GHashTable *annotations;
};
struct _FlatpakOciIndexClass
{
FlatpakOciVersionedClass parent_class;
};
FlatpakOciIndex * flatpak_oci_index_new (void);
void flatpak_oci_index_add_manifest (FlatpakOciIndex *self,
FlatpakOciDescriptor *desc);
gboolean flatpak_oci_index_remove_manifest (FlatpakOciIndex *self,
const char *ref);
FlatpakOciManifestDescriptor *flatpak_oci_index_get_manifest (FlatpakOciIndex *self,
const char *ref);
FlatpakOciManifestDescriptor *flatpak_oci_index_get_only_manifest (FlatpakOciIndex *self);
int flatpak_oci_index_get_n_manifests (FlatpakOciIndex *self);
#define FLATPAK_TYPE_OCI_IMAGE flatpak_oci_image_get_type ()
G_DECLARE_FINAL_TYPE (FlatpakOciImage, flatpak_oci_image, FLATPAK, OCI_IMAGE, FlatpakJson)
typedef struct
{
char *type;
char **diff_ids;
} FlatpakOciImageRootfs;
typedef struct
{
char *user;
char *working_dir;
gint64 memory;
gint64 memory_swap;
gint64 cpu_shares;
char **env;
char **cmd;
char **entrypoint;
char **exposed_ports;
char **volumes;
GHashTable *labels;
} FlatpakOciImageConfig;
typedef struct
{
char *created;
char *created_by;
char *author;
char *comment;
gboolean empty_layer;
} FlatpakOciImageHistory;
struct _FlatpakOciImage
{
FlatpakJson parent;
char *created;
char *author;
char *architecture;
char *os;
FlatpakOciImageRootfs rootfs;
FlatpakOciImageConfig config;
FlatpakOciImageHistory **history;
};
struct _FlatpakOciImageClass
{
FlatpakJsonClass parent_class;
};
FlatpakOciImage *flatpak_oci_image_new (void);
void flatpak_oci_image_set_created (FlatpakOciImage *image,
const char *created);
void flatpak_oci_image_set_architecture (FlatpakOciImage *image,
const char *arch);
void flatpak_oci_image_set_os (FlatpakOciImage *image,
const char *os);
void flatpak_oci_image_set_layers (FlatpakOciImage *image,
const char **layers);
void flatpak_oci_image_set_layer (FlatpakOciImage *image,
const char *layer);
void flatpak_oci_add_annotations_for_commit (GHashTable *annotations,
const char *ref,
const char *commit,
GVariant *commit_data);
void flatpak_oci_parse_commit_annotations (GHashTable *annotations,
guint64 *out_timestamp,
char **out_subject,
char **out_body,
char **out_ref,
char **out_commit,
char **out_parent_commit,
GVariantBuilder *metadata_builder);
#define FLATPAK_TYPE_OCI_SIGNATURE flatpak_oci_signature_get_type ()
G_DECLARE_FINAL_TYPE (FlatpakOciSignature, flatpak_oci_signature, FLATPAK, OCI_SIGNATURE, FlatpakJson)
typedef struct
{
char *digest;
} FlatpakOciSignatureCriticalImage;
typedef struct
{
char *ref;
} FlatpakOciSignatureCriticalIdentity;
typedef struct
{
char *type;
FlatpakOciSignatureCriticalImage image;
FlatpakOciSignatureCriticalIdentity identity;
} FlatpakOciSignatureCritical;
typedef struct
{
char *creator;
gint64 timestamp;
} FlatpakOciSignatureOptional;
struct _FlatpakOciSignature
{
FlatpakJson parent;
FlatpakOciSignatureCritical critical;
FlatpakOciSignatureOptional optional;
};
struct _FlatpakOciSignatureClass
{
FlatpakJsonClass parent_class;
};
FlatpakOciSignature *flatpak_oci_signature_new (const char *digest, const char *ref);
#endif /* __FLATPAK_JSON_OCI_H__ */