Skip to content

Commit

Permalink
app-emulation/skopeo: new package
Browse files Browse the repository at this point in the history
Package-Manager: Portage-2.3.6, Repoman-2.3.1
  • Loading branch information
williamh committed Jun 23, 2017
1 parent 602a5ac commit ea3aa51
Show file tree
Hide file tree
Showing 4 changed files with 224 additions and 0 deletions.
1 change: 1 addition & 0 deletions app-emulation/skopeo/Manifest
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
DIST skopeo-0.1.22.tar.gz 1921286 SHA256 a2090f84e5318752bf506fd7aa6d8420285726c32dcbac3ab735ec5762104692 SHA512 10ed4e577b07f672540ff86774b5c5b6b7531765fd36313b9e4e6bf974840fee98ede193014977c381b96875cb9147307ee690f4fc8dd4f97d87681d7fa2f4f2 WHIRLPOOL 94c88b784c8a7186ff6abd5d4a1f2c2307fb9c29c98f256a28a5d066546afc7cbb0c848aec77c8835c63f5c62628a8e983d25f4e63e3c6bfa5f4322dd9420522
158 changes: 158 additions & 0 deletions app-emulation/skopeo/files/skopeo-0.1.22-make-ostree-optional.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,158 @@
From a49f22efd84d1cc656242319cca27cbdf8852e05 Mon Sep 17 00:00:00 2001
From: William Hubbs <[email protected]>
Date: Fri, 23 Jun 2017 12:34:25 -0500
Subject: [PATCH] make ostree optional

---
vendor/github.com/containers/image/README.md | 14 ++++++---
.../transports/alltransports/alltransports.go | 2 +-
.../image/transports/alltransports/ostree.go | 8 +++++
.../image/transports/alltransports/ostree_stub.go | 9 ++++++
.../github.com/containers/image/transports/stub.go | 36 ++++++++++++++++++++++
.../containers/image/transports/stub_test.go | 18 +++++++++++
6 files changed, 82 insertions(+), 5 deletions(-)
create mode 100644 vendor/github.com/containers/image/transports/alltransports/ostree.go
create mode 100644 vendor/github.com/containers/image/transports/alltransports/ostree_stub.go
create mode 100644 vendor/github.com/containers/image/transports/stub.go
create mode 100644 vendor/github.com/containers/image/transports/stub_test.go

diff --git a/vendor/github.com/containers/image/README.md b/vendor/github.com/containers/image/README.md
index ca8afd4..8e812bb 100644
--- a/vendor/github.com/containers/image/README.md
+++ b/vendor/github.com/containers/image/README.md
@@ -51,14 +51,20 @@ Ensure that the dependencies documented [in vendor.conf](https://github.com/cont
are also available
(using those exact versions or different versions of your choosing).

-This library, by default, also depends on the GpgME C library. Either install it:
+This library, by default, also depends on the GpgME and libostree C libraries. Either install them:
```sh
-Fedora$ dnf install gpgme-devel libassuan-devel
+Fedora$ dnf install gpgme-devel libassuan-devel libostree-devel
macOS$ brew install gpgme
```
-or use the `containers_image_openpgp` build tag (e.g. using `go build -tags …`)
-This will use a Golang-only OpenPGP implementation for signature verification instead of the default cgo/gpgme-based implementation;
+or use the build tags described below to avoid the dependencies (e.g. using `go build -tags …`)
+
+### Supported build tags
+
+- `containers_image_openpgp`: Use a Golang-only OpenPGP implementation for signature verification instead of the default cgo/gpgme-based implementation;
the primary downside is that creating new signatures with the Golang-only implementation is not supported.
+- `containers_image_ostree_stub`: Instead of importing `ostree:` transport in `github.com/containers/image/transports/alltransports`, use a stub which reports that the transport is not supported. This allows building the library without requiring the `libostree` development libraries.
+
+ (Note that explicitly importing `github.com/containers/image/ostree` will still depend on the `libostree` library, this build tag only affects generic users of …`/alltransports`.)

## Contributing

diff --git a/vendor/github.com/containers/image/transports/alltransports/alltransports.go b/vendor/github.com/containers/image/transports/alltransports/alltransports.go
index dc70fad..dd80b7f 100644
--- a/vendor/github.com/containers/image/transports/alltransports/alltransports.go
+++ b/vendor/github.com/containers/image/transports/alltransports/alltransports.go
@@ -12,7 +12,7 @@ import (
_ "github.com/containers/image/docker/daemon"
_ "github.com/containers/image/oci/layout"
_ "github.com/containers/image/openshift"
- _ "github.com/containers/image/ostree"
+ // The ostree transport is registered by ostree*.go
_ "github.com/containers/image/storage"
"github.com/containers/image/transports"
"github.com/containers/image/types"
diff --git a/vendor/github.com/containers/image/transports/alltransports/ostree.go b/vendor/github.com/containers/image/transports/alltransports/ostree.go
new file mode 100644
index 0000000..0fc5d7e
--- /dev/null
+++ b/vendor/github.com/containers/image/transports/alltransports/ostree.go
@@ -0,0 +1,8 @@
+// +build !containers_image_ostree_stub
+
+package alltransports
+
+import (
+ // Register the ostree transport
+ _ "github.com/containers/image/ostree"
+)
diff --git a/vendor/github.com/containers/image/transports/alltransports/ostree_stub.go b/vendor/github.com/containers/image/transports/alltransports/ostree_stub.go
new file mode 100644
index 0000000..8b01afe
--- /dev/null
+++ b/vendor/github.com/containers/image/transports/alltransports/ostree_stub.go
@@ -0,0 +1,9 @@
+// +build containers_image_ostree_stub
+
+package alltransports
+
+import "github.com/containers/image/transports"
+
+func init() {
+ transports.Register(transports.NewStubTransport("ostree"))
+}
diff --git a/vendor/github.com/containers/image/transports/stub.go b/vendor/github.com/containers/image/transports/stub.go
new file mode 100644
index 0000000..087f69b
--- /dev/null
+++ b/vendor/github.com/containers/image/transports/stub.go
@@ -0,0 +1,36 @@
+package transports
+
+import (
+ "fmt"
+
+ "github.com/containers/image/types"
+)
+
+// stubTransport is an implementation of types.ImageTransport which has a name, but rejects any references with “the transport $name: is not supported in this build”.
+type stubTransport string
+
+// NewStubTransport returns an implementation of types.ImageTransport which has a name, but rejects any references with “the transport $name: is not supported in this build”.
+func NewStubTransport(name string) types.ImageTransport {
+ return stubTransport(name)
+}
+
+// Name returns the name of the transport, which must be unique among other transports.
+func (s stubTransport) Name() string {
+ return string(s)
+}
+
+// ParseReference converts a string, which should not start with the ImageTransport.Name prefix, into an ImageReference.
+func (s stubTransport) ParseReference(reference string) (types.ImageReference, error) {
+ return nil, fmt.Errorf(`The transport "%s:" is not supported in this build`, string(s))
+}
+
+// ValidatePolicyConfigurationScope checks that scope is a valid name for a signature.PolicyTransportScopes keys
+// (i.e. a valid PolicyConfigurationIdentity() or PolicyConfigurationNamespaces() return value).
+// It is acceptable to allow an invalid value which will never be matched, it can "only" cause user confusion.
+// scope passed to this function will not be "", that value is always allowed.
+func (s stubTransport) ValidatePolicyConfigurationScope(scope string) error {
+ // Allowing any reference in here allows tools with some transports stubbed-out to still
+ // use signature verification policies which refer to these stubbed-out transports.
+ // See also the treatment of unknown transports in policyTransportScopesWithTransport.UnmarshalJSON .
+ return nil
+}
diff --git a/vendor/github.com/containers/image/transports/stub_test.go b/vendor/github.com/containers/image/transports/stub_test.go
new file mode 100644
index 0000000..f181a1a
--- /dev/null
+++ b/vendor/github.com/containers/image/transports/stub_test.go
@@ -0,0 +1,18 @@
+package transports
+
+import (
+ "testing"
+
+ "github.com/stretchr/testify/assert"
+)
+
+func TestStubTransport(t *testing.T) {
+ const name = "whatever"
+
+ s := NewStubTransport(name)
+ assert.Equal(t, name, s.Name())
+ _, err := s.ParseReference("this is rejected regardless of content")
+ assert.Error(t, err)
+ err = s.ValidatePolicyConfigurationScope("this is accepted regardless of content")
+ assert.NoError(t, err)
+}
--
2.13.0

8 changes: 8 additions & 0 deletions app-emulation/skopeo/metadata.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
<pkgmetadata>
<maintainer type="person">
<email>[email protected]</email>
<name>William Hubbs</name>
</maintainer>
</pkgmetadata>
57 changes: 57 additions & 0 deletions app-emulation/skopeo/skopeo-0.1.22.ebuild
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
# Copyright 1999-2017 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2

EAPI=6
EGO_PN=github.com/projectatomic/skopeo
COMMIT=5d24b67
inherit golang-vcs-snapshot

DESCRIPTION="Command line utility foroperations on container images and image repositories"
HOMEPAGE="http://github.com/projectatomic/skopeo"
SRC_URI="https://github.com/projectatomic/${PN}/archive/v${PV}.tar.gz -> ${P}.tar.gz"

LICENSE="Apache-2.0"
SLOT="0"
KEYWORDS="~amd64"
IUSE=""

COMMON_DEPEND=">=app-crypt/gpgme-1.5.5:=
>=dev-libs/libassuan-2.4.3
>=sys-fs/btrfs-progs-4.0.1
>=sys-fs/lvm2-2.02.145"
DEPEND="${COMMON_DEPEND}
dev-go/go-md2man"
RDEPEND="${COMMON_DEPEND}"

PATCHES=(
"${FILESDIR}"/${P}-make-ostree-optional.patch
)

S="${WORKDIR}/${P}/src/${EGO_PN}"

RESTRICT="test"

src_compile() {
local BUILDTAGS="containers_image_ostree_stub"
set -- env GOPATH="${WORKDIR}/${P}" \
go build -ldflags "-X main.gitCommit=${COMMIT}" \
-gcflags "${GOGCFLAGS}" -tags "${BUILDTAGS}" \
-o skopeo ./cmd/skopeo
echo "$@"
"$@" || die
cd docs
for f in *.1.md; do
go-md2man -in ${f} -out ${f%%.md} || die
done
}

src_install() {
dobin skopeo
doman docs/*.1
insinto /etc/containers
newins default-policy.json policy.json
insinto /etc/containers/registries.d
doins default.yaml
dodir /var/lib/atomic/sigstore
einstalldocs
}

0 comments on commit ea3aa51

Please sign in to comment.