Skip to content

Commit

Permalink
Merge branch 'oras-project:main' into feature/pushManifestWithSubject
Browse files Browse the repository at this point in the history
  • Loading branch information
pat-pan authored Nov 19, 2024
2 parents 7fca0cb + 3fa86d6 commit bd14c4d
Show file tree
Hide file tree
Showing 14 changed files with 1,704 additions and 23 deletions.
6 changes: 5 additions & 1 deletion .github/.codecov.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,5 +15,9 @@ coverage:
status:
project:
default:
target: 70%
target: 80%
if_ci_failed: error
patch:
default:
target: 80%
if_ci_failed: error
36 changes: 36 additions & 0 deletions src/OrasProject.Oras/Exceptions/InvalidDateTimeFormatException.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
// Copyright The ORAS 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
//
// http://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.

using System;

namespace OrasProject.Oras.Exceptions;

/// <summary>
/// InvalidDateTimeFormatException is thrown when a time format is invalid.
/// </summary>
public class InvalidDateTimeFormatException : FormatException
{
public InvalidDateTimeFormatException()
{
}

public InvalidDateTimeFormatException(string? message)
: base(message)
{
}

public InvalidDateTimeFormatException(string? message, Exception? inner)
: base(message, inner)
{
}
}
36 changes: 36 additions & 0 deletions src/OrasProject.Oras/Exceptions/InvalidMediaTypeException.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
// Copyright The ORAS 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
//
// http://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.

using System;

namespace OrasProject.Oras.Exceptions;

/// <summary>
/// InvalidMediaTypeException is thrown when media type is invalid.
/// </summary>
public class InvalidMediaTypeException : FormatException
{
public InvalidMediaTypeException()
{
}

public InvalidMediaTypeException(string? message)
: base(message)
{
}

public InvalidMediaTypeException(string? message, Exception? inner)
: base(message, inner)
{
}
}
36 changes: 36 additions & 0 deletions src/OrasProject.Oras/Exceptions/MissingArtifactTypeException.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
// Copyright The ORAS 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
//
// http://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.

using System;

namespace OrasProject.Oras.Exceptions;

/// <summary>
/// MissingArtifactTypeException is thrown when artifactType is not found in manifest.
/// </summary>
public class MissingArtifactTypeException : FormatException
{
public MissingArtifactTypeException()
{
}

public MissingArtifactTypeException(string? message)
: base(message)
{
}

public MissingArtifactTypeException(string? message, Exception? inner)
: base(message, inner)
{
}
}
22 changes: 22 additions & 0 deletions src/OrasProject.Oras/Oci/Descriptor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,10 @@
// See the License for the specific language governing permissions and
// limitations under the License.

using System;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using System.Text;
using System.Text.Json.Serialization;
using OrasProject.Oras.Content;

Expand Down Expand Up @@ -48,6 +51,25 @@ public class Descriptor
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)]
public string? ArtifactType { get; set; }

public static Descriptor Create(Span<byte> data, string mediaType)
{
byte[] byteData = data.ToArray();
return new Descriptor
{
MediaType = mediaType,
Digest = Content.Digest.ComputeSHA256(byteData),
Size = byteData.Length
};
}

public static Descriptor Empty => new()
{
MediaType = Oci.MediaType.EmptyJson,
Digest = "sha256:44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a",
Size = 2,
Data = [0x7B, 0x7D]
};

internal BasicDescriptor BasicDescriptor => new BasicDescriptor(MediaType, Digest, Size);

internal static bool IsEmptyOrNull(Descriptor? descriptor)
Expand Down
2 changes: 1 addition & 1 deletion src/OrasProject.Oras/OrasProject.Oras.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
</AssemblyAttribute>
</ItemGroup>
<ItemGroup>
<PackageReference Include="System.Text.Json" Version="8.0.5" />
<PackageReference Include="System.Text.Json" Version="9.0.0" />
</ItemGroup>
<ItemGroup>
<None Include="README.md" Pack="true" PackagePath="/" />
Expand Down
55 changes: 55 additions & 0 deletions src/OrasProject.Oras/PackManifestOptions.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
// Copyright The ORAS 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
//
// http://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.

using OrasProject.Oras.Oci;

using System.Collections.Generic;
using System.Threading;

namespace OrasProject.Oras;

public struct PackManifestOptions
{
public static PackManifestOptions None { get; }

/// <summary>
/// Config references a configuration object for a container, by digest
/// For more details: https://github.com/opencontainers/image-spec/blob/v1.1.0/manifest.md#image-manifest-property-descriptions.
/// </summary>
public Descriptor? Config { get; set; }

/// <summary>
/// Layers is an array of objects, and each object id a Content Descriptor (or simply Descriptor)
/// For more details: https://github.com/opencontainers/image-spec/blob/v1.1.0/manifest.md#image-manifest-property-descriptions.
/// </summary>
public IList<Descriptor>? Layers { get; set; }

/// <summary>
/// Subject is the subject of the manifest.
/// This option is invalid when PackManifestVersion is PackManifestVersion1_0.
/// </summary>
public Descriptor? Subject { get; set; }

/// <summary>
/// ManifestAnnotations is OPTIONAL property. It contains arbitrary metadata for the image manifest
/// and MUST use the annotation rules
/// </summary>
public IDictionary<string, string>? ManifestAnnotations { get; set; }

/// <summary>
/// ConfigAnnotations is the annotation map of the config descriptor.
/// This option is valid only when Config is null.
/// </summary>
public IDictionary<string, string>? ConfigAnnotations { get; set; }
}

Loading

0 comments on commit bd14c4d

Please sign in to comment.