Files
wehub-resource-sync 680845cb1c
Linux build / Determine Swift version (push) Waiting to run
Linux build / Linux compile check (push) Blocked by required conditions
Build containerization / Verify commit signatures (push) Has been skipped
Build containerization / containerization (push) Successful in 0s
chore: import upstream snapshot with attribution
2026-07-13 12:25:30 +08:00

174 lines
6.4 KiB
Swift

//===----------------------------------------------------------------------===//
// Copyright © 2025-2026 Apple Inc. and the Containerization project authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//===----------------------------------------------------------------------===//
// Source: https://github.com/opencontainers/image-spec/blob/main/specs-go/v1/config.go
import Foundation
/// ImageConfig defines the execution parameters which should be used as a base when running a container using an image.
public struct ImageConfig: Codable, Sendable {
enum CodingKeys: String, CodingKey {
case user = "User"
case env = "Env"
case entrypoint = "Entrypoint"
case cmd = "Cmd"
case workingDir = "WorkingDir"
case labels = "Labels"
case stopSignal = "StopSignal"
}
/// user defines the username or UID which the process in the container should run as.
public let user: String?
/// env is a list of environment variables to be used in a container.
public let env: [String]?
/// entrypoint defines a list of arguments to use as the command to execute when the container starts.
public let entrypoint: [String]?
/// cmd defines the default arguments to the entrypoint of the container.
public let cmd: [String]?
/// workingDir sets the current working directory of the entrypoint process in the container.
public let workingDir: String?
/// labels contains arbitrary metadata for the container.
public let labels: [String: String]?
/// stopSignal contains the system call signal that will be sent to the container to exit.
public let stopSignal: String?
public init(
user: String? = nil, env: [String]? = nil, entrypoint: [String]? = nil, cmd: [String]? = nil,
workingDir: String? = nil, labels: [String: String]? = nil, stopSignal: String? = nil
) {
self.user = user
self.env = env
self.entrypoint = entrypoint
self.cmd = cmd
self.workingDir = workingDir
self.labels = labels
self.stopSignal = stopSignal
}
}
/// RootFS describes a layer content addresses
public struct Rootfs: Codable, Sendable {
enum CodingKeys: String, CodingKey {
case type
case diffIDs = "diff_ids"
}
/// type is the type of the rootfs.
public let type: String
/// diffIDs is an array of layer content hashes (DiffIDs), in order from bottom-most to top-most.
public let diffIDs: [String]
public init(type: String, diffIDs: [String]) {
self.type = type
self.diffIDs = diffIDs
}
}
/// History describes the history of a layer.
public struct History: Codable, Sendable {
enum CodingKeys: String, CodingKey {
case created
case createdBy = "created_by"
case author
case comment
case emptyLayer = "empty_layer"
}
/// created is the combined date and time at which the layer was created, formatted as defined by RFC 3339, section 5.6.
public let created: String?
/// createdBy is the command which created the layer.
public let createdBy: String?
/// author is the author of the build point.
public let author: String?
/// comment is a custom message set when creating the layer.
public let comment: String?
/// emptyLayer is used to mark if the history item created a filesystem diff.
public let emptyLayer: Bool?
public init(
created: String? = nil, createdBy: String? = nil, author: String? = nil, comment: String? = nil,
emptyLayer: Bool? = nil
) {
self.created = created
self.createdBy = createdBy
self.author = author
self.comment = comment
self.emptyLayer = emptyLayer
}
}
/// Image is the JSON structure which describes some basic information about the image.
/// This provides the `application/vnd.oci.image.config.v1+json` mediatype when marshalled to JSON.
public struct Image: Codable, Sendable {
/// created is the combined date and time at which the image was created, formatted as defined by RFC 3339, section 5.6.
public let created: String?
/// author defines the name and/or email address of the person or entity which created and is responsible for maintaining the image.
public let author: String?
/// architecture field specifies the CPU architecture, for example `amd64` or `ppc64`.
public let architecture: String
/// os specifies the operating system, for example `linux` or `windows`.
public let os: String
/// osVersion is an optional field specifying the operating system version, for example on Windows `10.0.14393.1066`.
public let osVersion: String?
/// osFeatures is an optional field specifying an array of strings, each listing a required OS feature (for example on Windows `win32k`).
public let osFeatures: [String]?
/// variant is an optional field specifying a variant of the CPU, for example `v7` to specify ARMv7 when architecture is `arm`.
public let variant: String?
/// config defines the execution parameters which should be used as a base when running a container using the image.
public let config: ImageConfig?
/// rootfs references the layer content addresses used by the image.
public let rootfs: Rootfs
/// history describes the history of each layer.
public let history: [History]?
public init(
created: String? = nil, author: String? = nil, architecture: String, os: String, osVersion: String? = nil,
osFeatures: [String]? = nil, variant: String? = nil, config: ImageConfig? = nil, rootfs: Rootfs,
history: [History]? = nil
) {
self.created = created
self.author = author
self.architecture = architecture
self.os = os
self.osVersion = osVersion
self.osFeatures = osFeatures
self.variant = variant
self.config = config
self.rootfs = rootfs
self.history = history
}
}