Skip to content

Commit

Permalink
[release-v0.18.0] fix: version info for OCI refs (#1080)
Browse files Browse the repository at this point in the history
<!-- markdownlint-disable MD041 -->
#### What this PR does / why we need it

Cherry Pick from
a1890c2

#### Which issue(s) this PR fixes
<!--
Usage: `Fixes #<issue number>`, or `Fixes (paste link of issue)`.
-->

---------

Co-authored-by: Uwe Krueger <[email protected]>
  • Loading branch information
jakobmoellerdev and mandelsoft authored Nov 12, 2024
1 parent efae7d1 commit 0117891
Show file tree
Hide file tree
Showing 8 changed files with 164 additions and 23 deletions.
22 changes: 21 additions & 1 deletion api/oci/ociutils/ref.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,9 @@ func ParseVersion(vers string) (*ArtVersion, error) {
Digest: &dig,
}, nil
}
if vers == "" {
return &ArtVersion{}, nil
}
return &ArtVersion{
Tag: &vers,
}, nil
Expand All @@ -50,7 +53,7 @@ type ArtVersion struct {
}

func (v *ArtVersion) VersionSpec() string {
if v != nil {
if v == nil {
return ""
}

Expand Down Expand Up @@ -95,3 +98,20 @@ func (v *ArtVersion) GetTag() string {
}
return ""
}

func (v *ArtVersion) GetDigest() digest.Digest {
if v != nil && v.Digest != nil {
return *v.Digest
}
return ""
}

func (r *ArtVersion) Version() string {
if r.Digest != nil {
return "@" + string(*r.Digest)
}
if r.Tag != nil {
return *r.Tag
}
return "latest"
}
70 changes: 70 additions & 0 deletions api/oci/ociutils/ref_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
package ociutils_test

import (
. "github.com/mandelsoft/goutils/testutils"
. "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"
"github.com/opencontainers/go-digest"
"ocm.software/ocm/api/oci/ociutils"
"ocm.software/ocm/api/oci/testhelper"
)

var _ = Describe("Ref Test Environment", func() {
dig := "sha256:" + testhelper.H_OCIARCHMANIFEST1

type expect struct {
yaml string
versionSpec string
isVersion bool
version string
isTag bool
tag string
isDigested bool
digest string
}

DescribeTable("parsing", func(src string, e expect) {
v := Must(ociutils.ParseVersion(src))
Expect(v).NotTo(BeNil())
Expect(v).To(YAMLEqual(e.yaml))
Expect(v.VersionSpec()).To(Equal(e.versionSpec))
Expect(v.IsVersion()).To(Equal(e.isVersion))
Expect(v.Version()).To(Equal(e.version))
Expect(v.IsTagged()).To(Equal(e.isTag))
Expect(v.GetTag()).To(Equal(e.tag))
Expect(v.IsDigested()).To(Equal(e.isDigested))
Expect(v.GetDigest()).To(Equal(digest.Digest(e.digest)))
},
Entry("empty", "", expect{
yaml: "{}",
versionSpec: "latest",
version: "latest",
}),
Entry("tag", "tag", expect{
yaml: "{\"tag\":\"tag\"}",
versionSpec: "tag",
isVersion: true,
version: "tag",
isTag: true,
tag: "tag",
}),
Entry("digest", "@"+dig, expect{
yaml: "{\"digest\":\"" + dig + "\"}",
versionSpec: "@" + dig,
isVersion: true,
version: "@" + dig,
isDigested: true,
digest: dig,
}),
Entry("tag@digest", "tag@"+dig, expect{
yaml: "{\"tag\":\"tag\",\"digest\":\"" + dig + "\"}",
versionSpec: "tag@" + dig,
isVersion: true,
version: "@" + dig,
isTag: true,
tag: "tag",
isDigested: true,
digest: dig,
}),
)
})
13 changes: 13 additions & 0 deletions api/oci/ociutils/suite_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package ociutils_test

import (
"testing"

. "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"
)

func TestConfig(t *testing.T) {
RegisterFailHandler(Fail)
RunSpecs(t, "OCI Utils Test Suite")
}
10 changes: 0 additions & 10 deletions api/oci/ref.go
Original file line number Diff line number Diff line change
Expand Up @@ -272,16 +272,6 @@ type ArtSpec struct {
ArtVersion `json:",inline"`
}

func (r *ArtSpec) Version() string {
if r.Digest != nil {
return "@" + string(*r.Digest)
}
if r.Tag != nil {
return *r.Tag
}
return "latest"
}

func (r *ArtSpec) IsRegistry() bool {
return r.Repository == ""
}
Expand Down
8 changes: 4 additions & 4 deletions api/oci/testhelper/manifests.go
Original file line number Diff line number Diff line change
Expand Up @@ -64,8 +64,8 @@ func OCIArtifactResource1(env *builder.Builder, name string, host string, funcs

const (
D_OCIMANIFEST1 = "0c4abdb72cf59cb4b77f4aacb4775f9f546ebc3face189b2224a966c8826ca9f"
H_OCIARCHMANIFEST1 = "818fb6a69a5f55e8b3dbc921a61fdd000b9445a745b587ba753a811b02426326"
// H_OCIARCHMANIFEST1 = "b0692bcec00e0a875b6b280f3209d6776f3eca128adcb7e81e82fd32127c0c62".
H_OCIARCHMANIFEST1 = "b0692bcec00e0a875b6b280f3209d6776f3eca128adcb7e81e82fd32127c0c62"
// H_OCIARCHMANIFEST1 = "818fb6a69a5f55e8b3dbc921a61fdd000b9445a745b587ba753a811b02426326".
)

var DS_OCIMANIFEST1 = &metav1.DigestSpec{
Expand Down Expand Up @@ -124,8 +124,8 @@ func OCIManifest2For(env *builder.Builder, ns, tag string, nested ...func()) (*a

const (
D_OCIMANIFEST2 = "c2d2dca275c33c1270dea6168a002d67c0e98780d7a54960758139ae19984bd7"
H_OCIARCHMANIFEST2 = "2aaf6f8857dcbfa04a72fb98dd53f649b46e5d81aa4fb17330df74b0ffc30839"
// H_OCIARCHMANIFEST2 = "cb85cd58b10e36343971691abbfe40200cb645c6e95f0bdabd111a30cf794708".
H_OCIARCHMANIFEST2 = "cb85cd58b10e36343971691abbfe40200cb645c6e95f0bdabd111a30cf794708"
// H_OCIARCHMANIFEST2 = "2aaf6f8857dcbfa04a72fb98dd53f649b46e5d81aa4fb17330df74b0ffc30839".
)

func HashManifest2(fmt string) string {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ var _ = Describe("Method", func() {
return m.Close()
})
data := Must(m.Get())
Expect(len(data)).To(Equal(630))
Expect(len(data)).To(Equal(628))
Expect(accspeccpi.GetAccessMethodImplementation(m).(blobaccess.DigestSource).Digest().String()).To(Equal("sha256:0c4abdb72cf59cb4b77f4aacb4775f9f546ebc3face189b2224a966c8826ca9f"))
Expect(utils.GetOCIArtifactRef(env, res)).To(Equal("ocm/value:v2.0"))
})
Expand Down
48 changes: 48 additions & 0 deletions docs/releasenotes/v0.18.0-rc.2.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
# Release v0.18.0-rc.2

- change short text for help topic (#1058)
- bug: allow http protocol for oci access (#1060)
- bug: fix unmarshal consumer identity with empty value (#1057)
- fix artifact set tagging (#1033)
- component constructor with references field (#1054)
- priority for CLI registration options (#1045)
- chore: update 'flake.nix' (#1049)
- add action doc (#1032)
- chore: update 'flake.nix' (#1040)
- chore: update 'flake.nix' (#1039)
- fix downloader handling (#1031)
- Adjust README with rotated GPG key (#1025)

## 🐛 Bug Fixes

- fix: set tlskyber=0 (#1047)
- fix: remove ocm release key if present (#1024)
- chore: release fallout corrections (#1023)
- fix version info for OCI refs (#1078) [cherry-picked](https://github.com/open-component-model/ocm/pull/1080)

## 🧰 Maintenance

<details>
<summary>8 changes</summary>

- chore: force bump to 0.18.0-dev (#1061)
- chore: reuse aggregation from ctf during component build (#1044)
- chore: disable runner cache for release note drafter (#1051)
- chore: enhance the publishing to other repositories then github (#1028)
- chore: migrate all component builds: ca => ctf (#1043)
- chore(ci): various optimizations for build processing, caching and concurrency (#996)
- fix: remove ocm release key if present (#1024)
- chore: release fallout corrections (#1023)
</details>

## ⬆️ Dependencies

<details>
<summary>4 changes</summary>

- chore(deps): bump github.com/golang-jwt/jwt/v4 from 4.5.0 to 4.5.1 in the go\_modules group (#1048)
- chore(deps): bump github.com/containerd/errdefs from 0.3.0 to 1.0.0 (#1037)
- chore(deps): bump the ci group with 2 updates (#1038)
- chore(deps): bump the go group with 8 updates (#1036)
</details>

14 changes: 7 additions & 7 deletions examples/lib/tour/01-getting-started/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -168,32 +168,32 @@ differ, because the code always describes the latest version):

```text
resources of the latest version:
version: 0.17.0
version: 0.18.0-rc.1
provider: ocm.software
1: name: ocmcli
extra identity: "architecture"="amd64","os"="linux"
resource type: executable
access: Local blob sha256:03a45dcde67ba565fe806cb5db67da3387f772f7c50af711a0edd6f802570c04[]
access: Local blob sha256:74fdf71c5467cacd1cb09d15d6ad4944d60cc8efa1d704a91c337e54dcd03fbc[]
2: name: ocmcli
extra identity: "architecture"="arm64","os"="linux"
resource type: executable
access: Local blob sha256:5a622634ae43cf03eac91079389d83266891d1f9b2d8a3884cef6fe639180324[]
access: Local blob sha256:d0022850cce685d48ca589b3b59913ecbc3572f7f5082bca5c086a4bf2b47c5a[]
3: name: ocmcli
extra identity: "architecture"="arm64","os"="darwin"
resource type: executable
access: Local blob sha256:1482fe5b764e3a86cf96704d7a839ad7e53dcbfd4f5fce5405abffb1962153dd[]
access: Local blob sha256:1161fc38d0fe78ba3be97783f8676a46afa2baf57c199f937798f791cc4961d3[]
4: name: ocmcli
extra identity: "architecture"="amd64","os"="darwin"
resource type: executable
access: Local blob sha256:805f181aff48511eea12c699ed1bbcee8bdc4c5168924e81058aff8715946875[]
access: Local blob sha256:33074ce5cc079ea4fc1dbcc7bd54c27cc93f0e188d9ad8c56ba642c4ba6744af[]
5: name: ocmcli
extra identity: "architecture"="amd64","os"="windows"
resource type: executable
access: Local blob sha256:20839c68bf0c4cf99444d78ebb93f53358fa9e95fe806f186220bd21d520efa7[]
access: Local blob sha256:2fbac39d7772ae1cf209aca5bb5efdbb6b91e83aede9464c52304c3ccebb4f67[]
6: name: ocmcli-image
extra identity:
resource type: ociImage
access: OCI artifact ghcr.io/open-component-model/ocm/ocm.software/ocmcli/ocmcli-image:0.17.0@sha256:16fb52a1cb11c867bd058f4124dea53fbab94229842cc14b52653c2e80b1cede
access: OCI artifact ghcr.io/open-component-model/ocm/ocm.software/ocmcli/ocmcli-image:0.18.0-rc.1@sha256:3ba3e8c075f7f91e851ec3ce53da2347fe464b3ac33c6d65cf89a459193bb5cb
```

Resources have some metadata, like their identity and a resource type.
Expand Down

0 comments on commit 0117891

Please sign in to comment.