Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Test cov #8

Closed
wants to merge 11 commits into from
Closed
4 changes: 4 additions & 0 deletions .github/.codecov.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,8 @@ coverage:
project:
default:
target: 75%
if_ci_failed: error
patch:
default:
target: 80%
if_ci_failed: error
2 changes: 1 addition & 1 deletion .github/workflows/release-github.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ jobs:
- name: setup go environment
uses: actions/setup-go@v3
with:
go-version: '1.21.0'
go-version: '1.21.6'
- name: run goreleaser
uses: goreleaser/goreleaser-action@v2
with:
Expand Down
11 changes: 11 additions & 0 deletions .goreleaser.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ builds:
goos:
- darwin
- linux
- freebsd
- windows
goarch:
- amd64
Expand All @@ -35,6 +36,16 @@ builds:
goarm:
- '7'
ignore:
- goos: freebsd
goarch: arm64
- goos: freebsd
goarch: arm
- goos: freebsd
goarch: ppc64le
- goos: freebsd
goarch: riscv64
- goos: freebsd
goarch: s390x
- goos: windows
goarch: arm64
- goos: windows
Expand Down
2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.

FROM --platform=$BUILDPLATFORM docker.io/library/golang:1.21.0-alpine as builder
FROM --platform=$BUILDPLATFORM docker.io/library/golang:1.21.6-alpine as builder
ARG TARGETPLATFORM
RUN apk add git make
ENV ORASPKG /oras
Expand Down
140 changes: 52 additions & 88 deletions KEYS
Original file line number Diff line number Diff line change
Expand Up @@ -15,96 +15,60 @@ Developers to add their keys:
(gpg --list-sigs <your name>
&& gpg --armor --export <your name>) >> KEYS

pub rsa4096 2022-06-24 [SC] [expires: 2023-06-24]
95BB6CD46CA30D2B9CAEE56C9F2CD437A97DCB8F
uid [ultimate] Shiwei Zhang <[email protected]>
sig 3 9F2CD437A97DCB8F 2022-06-24 Shiwei Zhang <[email protected]>
sub rsa4096 2022-06-24 [E] [expires: 2023-06-24]
sig 9F2CD437A97DCB8F 2022-06-24 Shiwei Zhang <[email protected]>

-----BEGIN PGP PUBLIC KEY BLOCK-----

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
yFueD7eURGTVAw==
=h9hw
-----END PGP PUBLIC KEY BLOCK-----
pub rsa4096 2023-02-28 [SC] [expires: 2024-02-28]
BE6FA8DDA48D4C230091A0A9276D8A724CE1C704
pub rsa4096 2024-01-31 [SC] [expires: 2025-01-30]
46D3369B393F6F8271FD1CE8F86EC70D2B0C404F
uid [ultimate] Billy Zha <[email protected]>
sig 3 276D8A724CE1C704 2023-02-28 Billy Zha <[email protected]>
sig 3 F86EC70D2B0C404F 2024-01-31 Billy Zha <[email protected]>

-----BEGIN PGP PUBLIC KEY BLOCK-----

mQINBGP99/wBEADjBmHu39pKEGzpNYzkwehPkG5O/eowua4Nm83r+I7oAuh+gIPH
nBCd8B6wxskNm7l4KEl2DjH+znTWCXQKQhnp++K0vPRGKzZj6jmINJ/u52lw+4Uv
EADg1wKjsSj6RA4/5ZoYYL9APVTOo/VH/R8s9yNqne2c8GNdJXDZ01Rhf/f85uCz
D8iy3fm7lHmVUv2ZoitLA+t/l9PQqtijzJzRVcNQYt8rtcXx2SwmjIZEJq12Rl79
dJmp8VBxxMvdm0r0uxy58belbluyy6eaJBBxA3zFQBfvILUUhy7Gr4MJbwgOJLnM
XExfg3kqKWnrAhhc0EwGBkBOdO2dULMK+RQgli2p1EYSngZzgmRfLRNt3pdhlJ12
pyueYeEdPjXkJqjzfBx87iONncXUHPAx1uRzZ68L475+qlvXilBxMlzW8QZxq4vq
T/6ftYElZoTcG4vokgt2TPj7Ngi6hAO4ENda/YAH4fdT8dlS2R3mKYPPiwGu4x5F
/XLDt+UqzHIqFifFe50r9L4mZt1Yd5vclLAv3JEBU0io4ptjuAQy6MXCClhRWO9M
YnvhMMFyDxTJxUo8SGgn7UNYa1V7NlYjhNw1ObetFU3wSQ8h4oB/nGFpuhnAB7FK
dFGCAkesLzPYpJ0kwoyVDLmfcVYTUl9dysU1QSZcYRaNV1elVADPYgJXvwARAQAB
tCFCaWxseSBaaGEgPGppbnpoYTFAbWljcm9zb2Z0LmNvbT6JAlQEEwEKAD4WIQS+
b6jdpI1MIwCRoKknbYpyTOHHBAUCY/33/AIbAwUJAeEzgAULCQgHAgYVCgkICwIE
FgIDAQIeAQIXgAAKCRAnbYpyTOHHBEmNEADf6iGPe4IxNmbJWpyKDHCY+C7hvjOF
t7dfvIUqtbIUwmw+9uAiObqRqSj2WI1/eSzuG0bEqDvpojjFuNTMjooMt5tTLrUC
1Hi58QEh0X8P8MnqnkmO0sw1bhQWk2fgpdjdJSoSG07kTNKl0lavm9SbrT0bQLYf
3wIbNgqTU6+nNPqOlf22VNqHFOimFxoX7To4rU7GObVIUcifjX2+AQXgVu92he8t
8IDTWuzaIuuqsry5S1r8JpV2ekEKvtC85UlFLSt3ylivn1xmYyWlNhgvHKCd3L0h
1/fMVnnZ7gyrFrWopq9ve5m34UZHsL8zMERh9R74q5prHHJrnkRncWSko7C1D1Dr
hOnWA2MUg+ShCUyLvrmmh5pD+CfILe09DmNITe2YMikDnmVdEfeg1d7r2s+NHJGk
ZzWpz/30FhnsN+aF4NVd3C7snV9jldsuk3tPlePms13rop5L6bJhc/zjdTS7Pobq
lut/Ij2uDleG7roXP/+73E/q1Ru86HwZAgEtBzCHqCIt4VNLxz5vVBmALQ2Xxqno
vAyBF9RXB/Lre3Qg4WrP2iC4FkGP1ZAyzoEPz7uzTlsulLwOyCCjdlW52vzK8pTY
/PU7dJ1AkhORPCrAqeaKqRsfOJqNtQ68p2nz6PVbHcP1IDuIouJoCcQAiBhw5Dgm
RBMZfniMfn5wDA==
=qs4t
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
blbo6H6w/7d+
=sd98
-----END PGP PUBLIC KEY BLOCK-----
10 changes: 9 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ GIT_TAG = $(shell git describe --tags --abbrev=0 --exact-match 2>/dev/null)
GIT_DIRTY = $(shell test -n "`git status --porcelain`" && echo "dirty" || echo "clean")
GO_EXE = go

TARGET_OBJS ?= checksums.txt darwin_amd64.tar.gz darwin_arm64.tar.gz linux_amd64.tar.gz linux_arm64.tar.gz linux_armv7.tar.gz linux_s390x.tar.gz linux_ppc64le.tar.gz linux_riscv64.tar.gz windows_amd64.zip
TARGET_OBJS ?= checksums.txt darwin_amd64.tar.gz darwin_arm64.tar.gz linux_amd64.tar.gz linux_arm64.tar.gz linux_armv7.tar.gz linux_s390x.tar.gz linux_ppc64le.tar.gz linux_riscv64.tar.gz windows_amd64.zip freebsd_amd64.tar.gz

LDFLAGS = -w
ifdef VERSION
Expand Down Expand Up @@ -112,6 +112,14 @@ build-windows-arm64: ## build for windows arm64
GOARCH=arm64 CGO_ENABLED=0 GOOS=windows $(GO_EXE) build -v --ldflags="$(LDFLAGS)" \
-o bin/windows/arm64/$(CLI_EXE).exe $(CLI_PKG)

.PHONY: build-freebsd
build-freebsd: build-freebsd-amd64 ## build all freebsd architectures

.PHONY: build-freebsd-amd64
build-freebsd-amd64: ## build for freebsd amd64
GOARCH=amd64 CGO_ENABLED=0 GOOS=freebsd $(GO_EXE) build -v --ldflags="$(LDFLAGS)" \
-o bin/freebsd/amd64/$(CLI_EXE) $(CLI_PKG)

.PHONY: check-encoding
check-encoding: ## check file CR/LF encoding
! find cmd internal -name "*.go" -type f -exec file "{}" ";" | grep CRLF
Expand Down
9 changes: 3 additions & 6 deletions cmd/oras/internal/option/packer.go
Original file line number Diff line number Diff line change
Expand Up @@ -100,13 +100,10 @@ func (opts *Packer) LoadManifestAnnotations() (annotations map[string]map[string
}
if opts.AnnotationFilePath != "" {
if err = decodeJSON(opts.AnnotationFilePath, &annotations); err != nil {
errStr := err.Error()
docLink := " Please refer to the document at https://oras.land/docs/how_to_guides/manifest_annotations."
if !strings.HasSuffix(errStr, ".") {
docLink = "." + docLink
return nil, &oerrors.Error{
Err: fmt.Errorf(`invalid annotation json file: failed to load annotations from %s`, opts.AnnotationFilePath),
Recommendation: `Annotation file doesn't match the required format. Please refer to the document at https://oras.land/docs/how_to_guides/manifest_annotations`,
}
return nil, fmt.Errorf("failed to load annotations from %s: %w"+
docLink, opts.AnnotationFilePath, err)
}
}
if len(opts.ManifestAnnotations) != 0 {
Expand Down
8 changes: 8 additions & 0 deletions cmd/oras/internal/option/target.go
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,14 @@ func (opts *Target) Parse() error {
return nil
default:
opts.Type = TargetTypeRemote
if ref, err := registry.ParseReference(opts.RawReference); err != nil {
return err
} else if ref.Registry == "" || ref.Repository == "" {
return &oerrors.Error{
Err: fmt.Errorf("%q is an invalid reference", opts.RawReference),
Recommendation: "Please make sure the provided reference is in the form of <registry>/<repo>[:tag|@digest]",
}
}
return opts.Remote.Parse()
}
}
Expand Down
15 changes: 14 additions & 1 deletion cmd/oras/internal/option/target_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,10 @@ func TestTarget_Parse_oci(t *testing.T) {
}

func TestTarget_Parse_remote(t *testing.T) {
opts := Target{IsOCILayout: false}
opts := Target{
RawReference: "mocked/test",
IsOCILayout: false,
}
if err := opts.Parse(); err != nil {
t.Errorf("Target.Parse() error = %v", err)
}
Expand All @@ -48,6 +51,16 @@ func TestTarget_Parse_remote(t *testing.T) {
}
}

func TestTarget_Parse_remote_err(t *testing.T) {
opts := Target{
RawReference: "/test",
IsOCILayout: false,
}
if err := opts.Parse(); err == nil {
t.Errorf("expect Target.Parse() to fail but not")
}
}

func Test_parseOCILayoutReference(t *testing.T) {
type args struct {
raw string
Expand Down
8 changes: 7 additions & 1 deletion cmd/oras/root/attach.go
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,13 @@ func runAttach(cmd *cobra.Command, opts *attachOptions) error {
return err
}
if len(opts.FileRefs) == 0 && len(annotations[option.AnnotationManifest]) == 0 {
return errors.New("no blob or manifest annotation are provided")
return &oerrors.Error{
Err: errors.New(`neither file nor annotation provided in the command`),
Usage: fmt.Sprintf("%s %s", cmd.Parent().CommandPath(), cmd.Use),
Recommendation: `To attach to an existing artifact, please provide files
via argument or annotations via flag "--annotation". Run "oras attach -h"
for more options and examples`,
}
}

// prepare manifest
Expand Down
16 changes: 15 additions & 1 deletion cmd/oras/root/file.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,9 @@ package root

import (
"context"
"errors"
"fmt"
"io/fs"
"path/filepath"

ocispec "github.com/opencontainers/image-spec/specs-go/v1"
Expand All @@ -42,7 +44,7 @@ func loadFiles(ctx context.Context, store *file.Store, annotations map[string]ma
if verbose {
fmt.Println("Preparing", name)
}
file, err := store.Add(ctx, name, mediaType, filename)
file, err := addFile(ctx, store, name, mediaType, filename)
if err != nil {
return nil, err
}
Expand All @@ -62,3 +64,15 @@ func loadFiles(ctx context.Context, store *file.Store, annotations map[string]ma
}
return files, nil
}

func addFile(ctx context.Context, store *file.Store, name string, mediaType string, filename string) (ocispec.Descriptor, error) {
file, err := store.Add(ctx, name, mediaType, filename)
if err != nil {
var pathErr *fs.PathError
if errors.As(err, &pathErr) {
err = pathErr
}
return ocispec.Descriptor{}, err
}
return file, nil
}
2 changes: 1 addition & 1 deletion cmd/oras/root/push.go
Original file line number Diff line number Diff line change
Expand Up @@ -157,7 +157,7 @@ func runPush(ctx context.Context, opts *pushOptions) error {
if err != nil {
return err
}
desc, err := store.Add(ctx, option.AnnotationConfig, cfgMediaType, path)
desc, err := addFile(ctx, store, option.AnnotationConfig, cfgMediaType, path)
if err != nil {
return err
}
Expand Down
4 changes: 2 additions & 2 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,14 @@ require (
github.com/containerd/console v1.0.3
github.com/morikuni/aec v1.0.0
github.com/opencontainers/go-digest v1.0.0
github.com/opencontainers/image-spec v1.1.0-rc5
github.com/opencontainers/image-spec v1.1.0-rc6
github.com/sirupsen/logrus v1.9.3
github.com/spf13/cobra v1.8.0
github.com/spf13/pflag v1.0.5
golang.org/x/sync v0.6.0
golang.org/x/term v0.16.0
gopkg.in/yaml.v3 v3.0.1
oras.land/oras-go/v2 v2.3.1-0.20240117093352-d8783fe25d71
oras.land/oras-go/v2 v2.4.0
)

require (
Expand Down
8 changes: 4 additions & 4 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A=
github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc=
github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=
github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
github.com/opencontainers/image-spec v1.1.0-rc5 h1:Ygwkfw9bpDvs+c9E34SdgGOj41dX/cbdlwvlWt0pnFI=
github.com/opencontainers/image-spec v1.1.0-rc5/go.mod h1:X4pATf0uXsnn3g5aiGIsVnJBR4mxhKzfwmvK/B2NTm8=
github.com/opencontainers/image-spec v1.1.0-rc6 h1:XDqvyKsJEbRtATzkgItUqBA7QHk58yxX1Ov9HERHNqU=
github.com/opencontainers/image-spec v1.1.0-rc6/go.mod h1:W4s4sFTMaBeK1BQLXbG4AdM2szdn85PY75RI83NrTrM=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
Expand All @@ -37,5 +37,5 @@ gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
oras.land/oras-go/v2 v2.3.1-0.20240117093352-d8783fe25d71 h1:h7uU+S5uT4nJJr0dhgkARkid0XcAwcxveqBSSeYMR3A=
oras.land/oras-go/v2 v2.3.1-0.20240117093352-d8783fe25d71/go.mod h1:JE7nRv2IHCiuu7kbH3UmDCp7bYD38yfnt1sl0lkLrwk=
oras.land/oras-go/v2 v2.4.0 h1:i+Wt5oCaMHu99guBD0yuBjdLvX7Lz8ukPbwXdR7uBMs=
oras.land/oras-go/v2 v2.4.0/go.mod h1:osvtg0/ClRq1KkydMAEu/IxFieyjItcsQ4ut4PPF+f8=
Loading
Loading