Copy disabled (too large)
Download .txt
Showing preview only (39,671K chars total). Download the full file to get everything.
Repository: containers/skopeo
Branch: main
Commit: 529952e1a1a2
Files: 3210
Total size: 37.2 MB
Directory structure:
gitextract_nfgi394f/
├── .cirrus.yml
├── .fmf/
│ └── version
├── .github/
│ ├── renovate.json5
│ └── workflows/
│ ├── check_cirrus_cron.yml
│ ├── issue_pr_lock.yml
│ └── stale.yml
├── .gitignore
├── .golangci.yml
├── .packit.yaml
├── CODE-OF-CONDUCT.md
├── CONTRIBUTING.md
├── GOVERNANCE.md
├── LICENSE
├── MAINTAINERS.md
├── Makefile
├── OWNERS
├── README.md
├── ROADMAP.md
├── SECURITY.md
├── cmd/
│ └── skopeo/
│ ├── completions.go
│ ├── copy.go
│ ├── copy_test.go
│ ├── delete.go
│ ├── fixtures/
│ │ ├── .gitignore
│ │ ├── corrupt.signature
│ │ ├── empty.passphrase
│ │ ├── image.manifest.json
│ │ ├── image.signature
│ │ ├── pubring.gpg
│ │ ├── secring.gpg
│ │ ├── trustdb.gpg
│ │ └── v2s1-invalid-signatures.manifest.json
│ ├── generate_sigstore_key.go
│ ├── generate_sigstore_key_test.go
│ ├── inspect/
│ │ └── output.go
│ ├── inspect.go
│ ├── layers.go
│ ├── list_tags.go
│ ├── list_tags_test.go
│ ├── login.go
│ ├── login_test.go
│ ├── logout.go
│ ├── logout_test.go
│ ├── main.go
│ ├── main_test.go
│ ├── manifest.go
│ ├── manifest_test.go
│ ├── proxy.go
│ ├── proxy_windows.go
│ ├── signing.go
│ ├── signing_test.go
│ ├── sync.go
│ ├── sync_test.go
│ ├── unshare.go
│ ├── unshare_linux.go
│ ├── utils.go
│ ├── utils_nosequoia_test.go
│ ├── utils_sequoia_test.go
│ └── utils_test.go
├── contrib/
│ ├── cirrus/
│ │ ├── mac_cleanup.sh
│ │ ├── ostree_ext.dockerfile
│ │ └── runner.sh
│ └── skopeoimage/
│ └── README.md
├── default-policy.json
├── default.yaml
├── docs/
│ ├── skopeo-copy.1.md
│ ├── skopeo-delete.1.md
│ ├── skopeo-generate-sigstore-key.1.md
│ ├── skopeo-inspect.1.md
│ ├── skopeo-list-tags.1.md
│ ├── skopeo-login.1.md
│ ├── skopeo-logout.1.md
│ ├── skopeo-manifest-digest.1.md
│ ├── skopeo-standalone-sign.1.md
│ ├── skopeo-standalone-verify.1.md
│ ├── skopeo-sync.1.md
│ └── skopeo.1.md
├── docs-experimental/
│ └── skopeo-experimental-image-proxy.1.md
├── go.mod
├── go.sum
├── hack/
│ ├── btrfs_installed_tag.sh
│ ├── get_ci_vm.sh
│ ├── get_fqin.sh
│ ├── libsubid_tag.sh
│ ├── man-page-checker
│ ├── sqlite_tag.sh
│ ├── test-system.sh
│ ├── tree_status.sh
│ ├── validate-git-marks.sh
│ ├── validate-vet.sh
│ ├── warn-destructive-tests.sh
│ └── xref-helpmsgs-manpages
├── install.md
├── integration/
│ ├── blocked_test.go
│ ├── check_test.go
│ ├── copy_test.go
│ ├── fixtures/
│ │ ├── .gitignore
│ │ ├── blocked-registries.conf
│ │ ├── data/
│ │ │ ├── keystore/
│ │ │ │ ├── keystore.cookie
│ │ │ │ └── softkeys/
│ │ │ │ ├── 1F5825285B785E1DB13BF36D2D11A19ABA41C6AE.pgp
│ │ │ │ └── 50DDE898DF4E48755C8C2B7AF6F908B6FA48A229.pgp
│ │ │ └── pgp.cert.d/
│ │ │ ├── 1f/
│ │ │ │ └── 5825285b785e1db13bf36d2d11a19aba41c6ae
│ │ │ ├── 4d/
│ │ │ │ └── 8bcd544b7573eefaad18c278473e5f255d10b8
│ │ │ ├── 50/
│ │ │ │ └── dde898df4e48755c8c2b7af6f908b6fa48a229
│ │ │ ├── 68/
│ │ │ │ └── de230c4a009f5ee5fbb27984642d0130b86046
│ │ │ ├── trust-root
│ │ │ └── writelock
│ │ ├── image.manifest.json
│ │ ├── no-passphrase.pub
│ │ ├── policy.json
│ │ ├── registries.conf
│ │ ├── registries.yaml
│ │ ├── tls-details-1.3.yaml
│ │ ├── tls-details-anything.yaml
│ │ ├── tls-details-pqc-only.yaml
│ │ ├── uncompressed-image-s1/
│ │ │ ├── 160d823fdc48e62f97ba62df31e55424f8f5eb6b679c865eec6e59adfe304710
│ │ │ └── manifest.json
│ │ ├── uncompressed-image-s2/
│ │ │ ├── 160d823fdc48e62f97ba62df31e55424f8f5eb6b679c865eec6e59adfe304710
│ │ │ ├── 86ce150e65c72b30f885c261449d18b7c6832596916e7f654e08377b5a67b4ff
│ │ │ └── manifest.json
│ │ ├── with-passphrase.passphrase
│ │ └── with-passphrase.pub
│ ├── fixtures_info_test.go
│ ├── openshift_shell_test.go
│ ├── openshift_test.go
│ ├── procutils_linux_test.go
│ ├── procutils_test.go
│ ├── proxy_test.go
│ ├── registry_test.go
│ ├── signing_test.go
│ ├── sync_test.go
│ ├── tls_test.go
│ ├── user_agent_test.go
│ └── utils_test.go
├── plans/
│ └── main.fmf
├── rpm/
│ └── skopeo.spec
├── systemtest/
│ ├── 001-basic.bats
│ ├── 010-inspect.bats
│ ├── 020-copy.bats
│ ├── 030-local-registry-tls.bats
│ ├── 040-local-registry-auth.bats
│ ├── 050-signing.bats
│ ├── 060-delete.bats
│ ├── 070-list-tags.bats
│ ├── 080-sync.bats
│ ├── helpers.bash
│ ├── make-noarch-manifest
│ ├── run-tests
│ ├── testdata/
│ │ ├── busybox_latest.sif
│ │ └── docker-two-images.tar.xz
│ └── tmt/
│ └── main.fmf
├── vendor/
│ ├── cyphar.com/
│ │ └── go-pathrs/
│ │ ├── .golangci.yml
│ │ ├── COPYING
│ │ ├── doc.go
│ │ ├── handle_linux.go
│ │ ├── internal/
│ │ │ ├── fdutils/
│ │ │ │ └── fd_linux.go
│ │ │ └── libpathrs/
│ │ │ ├── error_unix.go
│ │ │ └── libpathrs_linux.go
│ │ ├── procfs/
│ │ │ └── procfs_linux.go
│ │ ├── root_linux.go
│ │ └── utils_linux.go
│ ├── dario.cat/
│ │ └── mergo/
│ │ ├── .deepsource.toml
│ │ ├── .gitignore
│ │ ├── .travis.yml
│ │ ├── CODE_OF_CONDUCT.md
│ │ ├── CONTRIBUTING.md
│ │ ├── FUNDING.json
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── SECURITY.md
│ │ ├── doc.go
│ │ ├── map.go
│ │ ├── merge.go
│ │ └── mergo.go
│ ├── github.com/
│ │ ├── BurntSushi/
│ │ │ └── toml/
│ │ │ ├── .gitignore
│ │ │ ├── COPYING
│ │ │ ├── README.md
│ │ │ ├── decode.go
│ │ │ ├── deprecated.go
│ │ │ ├── doc.go
│ │ │ ├── encode.go
│ │ │ ├── error.go
│ │ │ ├── internal/
│ │ │ │ └── tz.go
│ │ │ ├── lex.go
│ │ │ ├── meta.go
│ │ │ ├── parse.go
│ │ │ ├── type_fields.go
│ │ │ └── type_toml.go
│ │ ├── Masterminds/
│ │ │ └── semver/
│ │ │ └── v3/
│ │ │ ├── .gitignore
│ │ │ ├── .golangci.yml
│ │ │ ├── CHANGELOG.md
│ │ │ ├── LICENSE.txt
│ │ │ ├── Makefile
│ │ │ ├── README.md
│ │ │ ├── SECURITY.md
│ │ │ ├── collection.go
│ │ │ ├── constraints.go
│ │ │ ├── doc.go
│ │ │ └── version.go
│ │ ├── Microsoft/
│ │ │ └── go-winio/
│ │ │ ├── .gitattributes
│ │ │ ├── .gitignore
│ │ │ ├── .golangci.yml
│ │ │ ├── CODEOWNERS
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── SECURITY.md
│ │ │ ├── backup.go
│ │ │ ├── doc.go
│ │ │ ├── ea.go
│ │ │ ├── file.go
│ │ │ ├── fileinfo.go
│ │ │ ├── hvsock.go
│ │ │ ├── internal/
│ │ │ │ ├── fs/
│ │ │ │ │ ├── doc.go
│ │ │ │ │ ├── fs.go
│ │ │ │ │ ├── security.go
│ │ │ │ │ └── zsyscall_windows.go
│ │ │ │ ├── socket/
│ │ │ │ │ ├── rawaddr.go
│ │ │ │ │ ├── socket.go
│ │ │ │ │ └── zsyscall_windows.go
│ │ │ │ └── stringbuffer/
│ │ │ │ └── wstring.go
│ │ │ ├── pipe.go
│ │ │ ├── pkg/
│ │ │ │ └── guid/
│ │ │ │ ├── guid.go
│ │ │ │ ├── guid_nonwindows.go
│ │ │ │ ├── guid_windows.go
│ │ │ │ └── variant_string.go
│ │ │ ├── privilege.go
│ │ │ ├── reparse.go
│ │ │ ├── sd.go
│ │ │ ├── syscall.go
│ │ │ └── zsyscall_windows.go
│ │ ├── VividCortex/
│ │ │ └── ewma/
│ │ │ ├── .gitignore
│ │ │ ├── .whitesource
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── codecov.yml
│ │ │ └── ewma.go
│ │ ├── acarl005/
│ │ │ └── stripansi/
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ └── stripansi.go
│ │ ├── cespare/
│ │ │ └── xxhash/
│ │ │ └── v2/
│ │ │ ├── LICENSE.txt
│ │ │ ├── README.md
│ │ │ ├── testall.sh
│ │ │ ├── xxhash.go
│ │ │ ├── xxhash_amd64.s
│ │ │ ├── xxhash_arm64.s
│ │ │ ├── xxhash_asm.go
│ │ │ ├── xxhash_other.go
│ │ │ ├── xxhash_safe.go
│ │ │ └── xxhash_unsafe.go
│ │ ├── clipperhouse/
│ │ │ └── uax29/
│ │ │ └── v2/
│ │ │ ├── LICENSE
│ │ │ └── graphemes/
│ │ │ ├── README.md
│ │ │ ├── ansi.go
│ │ │ ├── ansi8.go
│ │ │ ├── iterator.go
│ │ │ ├── reader.go
│ │ │ ├── splitfunc.go
│ │ │ └── trie.go
│ │ ├── containerd/
│ │ │ ├── errdefs/
│ │ │ │ ├── LICENSE
│ │ │ │ ├── README.md
│ │ │ │ ├── errors.go
│ │ │ │ ├── pkg/
│ │ │ │ │ ├── LICENSE
│ │ │ │ │ ├── errhttp/
│ │ │ │ │ │ └── http.go
│ │ │ │ │ └── internal/
│ │ │ │ │ └── cause/
│ │ │ │ │ └── cause.go
│ │ │ │ └── resolve.go
│ │ │ └── stargz-snapshotter/
│ │ │ └── estargz/
│ │ │ ├── LICENSE
│ │ │ ├── build.go
│ │ │ ├── errorutil/
│ │ │ │ └── errors.go
│ │ │ ├── estargz.go
│ │ │ ├── gzip.go
│ │ │ ├── testutil.go
│ │ │ └── types.go
│ │ ├── containers/
│ │ │ ├── libtrust/
│ │ │ │ ├── CODE-OF-CONDUCT.md
│ │ │ │ ├── CONTRIBUTING.md
│ │ │ │ ├── LICENSE
│ │ │ │ ├── MAINTAINERS
│ │ │ │ ├── README.md
│ │ │ │ ├── SECURITY.md
│ │ │ │ ├── certificates.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── ec_key.go
│ │ │ │ ├── ec_key_no_openssl.go
│ │ │ │ ├── ec_key_openssl.go
│ │ │ │ ├── filter.go
│ │ │ │ ├── hash.go
│ │ │ │ ├── jsonsign.go
│ │ │ │ ├── key.go
│ │ │ │ ├── key_files.go
│ │ │ │ ├── key_manager.go
│ │ │ │ ├── rsa_key.go
│ │ │ │ └── util.go
│ │ │ └── ocicrypt/
│ │ │ ├── .gitignore
│ │ │ ├── .golangci.yml
│ │ │ ├── ADOPTERS.md
│ │ │ ├── CODE-OF-CONDUCT.md
│ │ │ ├── LICENSE
│ │ │ ├── MAINTAINERS
│ │ │ ├── Makefile
│ │ │ ├── README.md
│ │ │ ├── SECURITY.md
│ │ │ ├── blockcipher/
│ │ │ │ ├── blockcipher.go
│ │ │ │ └── blockcipher_aes_ctr.go
│ │ │ ├── config/
│ │ │ │ ├── config.go
│ │ │ │ ├── constructors.go
│ │ │ │ ├── keyprovider-config/
│ │ │ │ │ └── config.go
│ │ │ │ └── pkcs11config/
│ │ │ │ └── config.go
│ │ │ ├── crypto/
│ │ │ │ └── pkcs11/
│ │ │ │ ├── common.go
│ │ │ │ ├── pkcs11helpers.go
│ │ │ │ ├── pkcs11helpers_nocgo.go
│ │ │ │ └── utils.go
│ │ │ ├── encryption.go
│ │ │ ├── gpg.go
│ │ │ ├── gpgvault.go
│ │ │ ├── helpers/
│ │ │ │ └── parse_helpers.go
│ │ │ ├── keywrap/
│ │ │ │ ├── jwe/
│ │ │ │ │ └── keywrapper_jwe.go
│ │ │ │ ├── keyprovider/
│ │ │ │ │ └── keyprovider.go
│ │ │ │ ├── keywrap.go
│ │ │ │ ├── pgp/
│ │ │ │ │ └── keywrapper_gpg.go
│ │ │ │ ├── pkcs11/
│ │ │ │ │ └── keywrapper_pkcs11.go
│ │ │ │ └── pkcs7/
│ │ │ │ └── keywrapper_pkcs7.go
│ │ │ ├── reader.go
│ │ │ ├── spec/
│ │ │ │ └── spec.go
│ │ │ └── utils/
│ │ │ ├── delayedreader.go
│ │ │ ├── ioutils.go
│ │ │ ├── keyprovider/
│ │ │ │ ├── keyprovider.pb.go
│ │ │ │ └── keyprovider.proto
│ │ │ ├── testing.go
│ │ │ └── utils.go
│ │ ├── coreos/
│ │ │ └── go-oidc/
│ │ │ └── v3/
│ │ │ ├── LICENSE
│ │ │ ├── NOTICE
│ │ │ └── oidc/
│ │ │ ├── jose.go
│ │ │ ├── jwks.go
│ │ │ ├── oidc.go
│ │ │ └── verify.go
│ │ ├── cyberphone/
│ │ │ └── json-canonicalization/
│ │ │ ├── LICENSE
│ │ │ └── go/
│ │ │ └── src/
│ │ │ └── webpki.org/
│ │ │ └── jsoncanonicalizer/
│ │ │ ├── es6numfmt.go
│ │ │ └── jsoncanonicalizer.go
│ │ ├── cyphar/
│ │ │ └── filepath-securejoin/
│ │ │ ├── .golangci.yml
│ │ │ ├── CHANGELOG.md
│ │ │ ├── COPYING.md
│ │ │ ├── LICENSE.BSD
│ │ │ ├── LICENSE.MPL-2.0
│ │ │ ├── README.md
│ │ │ ├── VERSION
│ │ │ ├── codecov.yml
│ │ │ ├── doc.go
│ │ │ ├── internal/
│ │ │ │ └── consts/
│ │ │ │ └── consts.go
│ │ │ ├── join.go
│ │ │ ├── pathrs-lite/
│ │ │ │ ├── README.md
│ │ │ │ ├── doc.go
│ │ │ │ ├── internal/
│ │ │ │ │ ├── assert/
│ │ │ │ │ │ └── assert.go
│ │ │ │ │ ├── errors_linux.go
│ │ │ │ │ ├── fd/
│ │ │ │ │ │ ├── at_linux.go
│ │ │ │ │ │ ├── fd.go
│ │ │ │ │ │ ├── fd_linux.go
│ │ │ │ │ │ ├── mount_linux.go
│ │ │ │ │ │ └── openat2_linux.go
│ │ │ │ │ ├── gocompat/
│ │ │ │ │ │ ├── README.md
│ │ │ │ │ │ ├── doc.go
│ │ │ │ │ │ ├── gocompat_atomic_go119.go
│ │ │ │ │ │ ├── gocompat_atomic_unsupported.go
│ │ │ │ │ │ ├── gocompat_errors_go120.go
│ │ │ │ │ │ ├── gocompat_errors_unsupported.go
│ │ │ │ │ │ ├── gocompat_generics_go121.go
│ │ │ │ │ │ └── gocompat_generics_unsupported.go
│ │ │ │ │ ├── gopathrs/
│ │ │ │ │ │ ├── doc.go
│ │ │ │ │ │ ├── lookup_linux.go
│ │ │ │ │ │ ├── mkdir_linux.go
│ │ │ │ │ │ ├── open_linux.go
│ │ │ │ │ │ └── openat2_linux.go
│ │ │ │ │ ├── kernelversion/
│ │ │ │ │ │ └── kernel_linux.go
│ │ │ │ │ ├── linux/
│ │ │ │ │ │ ├── doc.go
│ │ │ │ │ │ ├── mount_linux.go
│ │ │ │ │ │ └── openat2_linux.go
│ │ │ │ │ └── procfs/
│ │ │ │ │ ├── procfs_linux.go
│ │ │ │ │ └── procfs_lookup_linux.go
│ │ │ │ ├── mkdir.go
│ │ │ │ ├── mkdir_libpathrs.go
│ │ │ │ ├── mkdir_purego.go
│ │ │ │ ├── open.go
│ │ │ │ ├── open_libpathrs.go
│ │ │ │ ├── open_purego.go
│ │ │ │ └── procfs/
│ │ │ │ ├── procfs_libpathrs.go
│ │ │ │ └── procfs_purego.go
│ │ │ └── vfs.go
│ │ ├── davecgh/
│ │ │ └── go-spew/
│ │ │ ├── LICENSE
│ │ │ └── spew/
│ │ │ ├── bypass.go
│ │ │ ├── bypasssafe.go
│ │ │ ├── common.go
│ │ │ ├── config.go
│ │ │ ├── doc.go
│ │ │ ├── dump.go
│ │ │ ├── format.go
│ │ │ └── spew.go
│ │ ├── distribution/
│ │ │ └── reference/
│ │ │ ├── .gitattributes
│ │ │ ├── .gitignore
│ │ │ ├── .golangci.yml
│ │ │ ├── CODE-OF-CONDUCT.md
│ │ │ ├── CONTRIBUTING.md
│ │ │ ├── GOVERNANCE.md
│ │ │ ├── LICENSE
│ │ │ ├── MAINTAINERS
│ │ │ ├── Makefile
│ │ │ ├── README.md
│ │ │ ├── SECURITY.md
│ │ │ ├── helpers.go
│ │ │ ├── normalize.go
│ │ │ ├── reference.go
│ │ │ ├── regexp.go
│ │ │ └── sort.go
│ │ ├── docker/
│ │ │ ├── distribution/
│ │ │ │ ├── LICENSE
│ │ │ │ └── registry/
│ │ │ │ └── api/
│ │ │ │ ├── errcode/
│ │ │ │ │ ├── errors.go
│ │ │ │ │ ├── handler.go
│ │ │ │ │ └── register.go
│ │ │ │ └── v2/
│ │ │ │ ├── descriptors.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── errors.go
│ │ │ │ ├── headerparser.go
│ │ │ │ ├── routes.go
│ │ │ │ └── urls.go
│ │ │ ├── docker-credential-helpers/
│ │ │ │ ├── LICENSE
│ │ │ │ ├── client/
│ │ │ │ │ ├── client.go
│ │ │ │ │ └── command.go
│ │ │ │ └── credentials/
│ │ │ │ ├── credentials.go
│ │ │ │ ├── error.go
│ │ │ │ ├── helper.go
│ │ │ │ └── version.go
│ │ │ ├── go-connections/
│ │ │ │ ├── LICENSE
│ │ │ │ ├── sockets/
│ │ │ │ │ ├── inmem_socket.go
│ │ │ │ │ ├── proxy.go
│ │ │ │ │ ├── sockets.go
│ │ │ │ │ ├── sockets_unix.go
│ │ │ │ │ ├── sockets_windows.go
│ │ │ │ │ ├── tcp_socket.go
│ │ │ │ │ ├── unix_socket.go
│ │ │ │ │ ├── unix_socket_unix.go
│ │ │ │ │ └── unix_socket_windows.go
│ │ │ │ └── tlsconfig/
│ │ │ │ ├── certpool.go
│ │ │ │ └── config.go
│ │ │ └── go-units/
│ │ │ ├── CONTRIBUTING.md
│ │ │ ├── LICENSE
│ │ │ ├── MAINTAINERS
│ │ │ ├── README.md
│ │ │ ├── circle.yml
│ │ │ ├── duration.go
│ │ │ ├── size.go
│ │ │ └── ulimit.go
│ │ ├── felixge/
│ │ │ └── httpsnoop/
│ │ │ ├── .gitignore
│ │ │ ├── LICENSE.txt
│ │ │ ├── Makefile
│ │ │ ├── README.md
│ │ │ ├── capture_metrics.go
│ │ │ ├── docs.go
│ │ │ ├── wrap_generated_gteq_1.8.go
│ │ │ └── wrap_generated_lt_1.8.go
│ │ ├── go-jose/
│ │ │ └── go-jose/
│ │ │ └── v4/
│ │ │ ├── .gitignore
│ │ │ ├── .golangci.yml
│ │ │ ├── .travis.yml
│ │ │ ├── CONTRIBUTING.md
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── SECURITY.md
│ │ │ ├── asymmetric.go
│ │ │ ├── cipher/
│ │ │ │ ├── cbc_hmac.go
│ │ │ │ ├── concat_kdf.go
│ │ │ │ ├── ecdh_es.go
│ │ │ │ └── key_wrap.go
│ │ │ ├── crypter.go
│ │ │ ├── doc.go
│ │ │ ├── encoding.go
│ │ │ ├── json/
│ │ │ │ ├── LICENSE
│ │ │ │ ├── README.md
│ │ │ │ ├── decode.go
│ │ │ │ ├── encode.go
│ │ │ │ ├── indent.go
│ │ │ │ ├── scanner.go
│ │ │ │ ├── stream.go
│ │ │ │ └── tags.go
│ │ │ ├── jwe.go
│ │ │ ├── jwk.go
│ │ │ ├── jws.go
│ │ │ ├── opaque.go
│ │ │ ├── shared.go
│ │ │ ├── signing.go
│ │ │ └── symmetric.go
│ │ ├── go-logr/
│ │ │ ├── logr/
│ │ │ │ ├── .golangci.yaml
│ │ │ │ ├── CHANGELOG.md
│ │ │ │ ├── CONTRIBUTING.md
│ │ │ │ ├── LICENSE
│ │ │ │ ├── README.md
│ │ │ │ ├── SECURITY.md
│ │ │ │ ├── context.go
│ │ │ │ ├── context_noslog.go
│ │ │ │ ├── context_slog.go
│ │ │ │ ├── discard.go
│ │ │ │ ├── funcr/
│ │ │ │ │ ├── funcr.go
│ │ │ │ │ └── slogsink.go
│ │ │ │ ├── logr.go
│ │ │ │ ├── sloghandler.go
│ │ │ │ ├── slogr.go
│ │ │ │ └── slogsink.go
│ │ │ └── stdr/
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ └── stdr.go
│ │ ├── golang/
│ │ │ └── protobuf/
│ │ │ ├── AUTHORS
│ │ │ ├── CONTRIBUTORS
│ │ │ ├── LICENSE
│ │ │ └── proto/
│ │ │ ├── buffer.go
│ │ │ ├── defaults.go
│ │ │ ├── deprecated.go
│ │ │ ├── discard.go
│ │ │ ├── extensions.go
│ │ │ ├── properties.go
│ │ │ ├── proto.go
│ │ │ ├── registry.go
│ │ │ ├── text_decode.go
│ │ │ ├── text_encode.go
│ │ │ ├── wire.go
│ │ │ └── wrappers.go
│ │ ├── google/
│ │ │ ├── go-containerregistry/
│ │ │ │ ├── LICENSE
│ │ │ │ └── pkg/
│ │ │ │ ├── name/
│ │ │ │ │ ├── README.md
│ │ │ │ │ ├── check.go
│ │ │ │ │ ├── digest.go
│ │ │ │ │ ├── doc.go
│ │ │ │ │ ├── errors.go
│ │ │ │ │ ├── options.go
│ │ │ │ │ ├── ref.go
│ │ │ │ │ ├── registry.go
│ │ │ │ │ ├── repository.go
│ │ │ │ │ └── tag.go
│ │ │ │ └── v1/
│ │ │ │ ├── config.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── hash.go
│ │ │ │ ├── image.go
│ │ │ │ ├── index.go
│ │ │ │ ├── layer.go
│ │ │ │ ├── manifest.go
│ │ │ │ ├── platform.go
│ │ │ │ ├── progress.go
│ │ │ │ ├── types/
│ │ │ │ │ └── types.go
│ │ │ │ └── zz_deepcopy_generated.go
│ │ │ ├── go-intervals/
│ │ │ │ ├── LICENSE
│ │ │ │ └── intervalset/
│ │ │ │ ├── intervalset.go
│ │ │ │ └── intervalset_immutable.go
│ │ │ └── uuid/
│ │ │ ├── CHANGELOG.md
│ │ │ ├── CONTRIBUTING.md
│ │ │ ├── CONTRIBUTORS
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── dce.go
│ │ │ ├── doc.go
│ │ │ ├── hash.go
│ │ │ ├── marshal.go
│ │ │ ├── node.go
│ │ │ ├── node_js.go
│ │ │ ├── node_net.go
│ │ │ ├── null.go
│ │ │ ├── sql.go
│ │ │ ├── time.go
│ │ │ ├── util.go
│ │ │ ├── uuid.go
│ │ │ ├── version1.go
│ │ │ ├── version4.go
│ │ │ ├── version6.go
│ │ │ └── version7.go
│ │ ├── gorilla/
│ │ │ └── mux/
│ │ │ ├── .editorconfig
│ │ │ ├── .gitignore
│ │ │ ├── LICENSE
│ │ │ ├── Makefile
│ │ │ ├── README.md
│ │ │ ├── doc.go
│ │ │ ├── middleware.go
│ │ │ ├── mux.go
│ │ │ ├── regexp.go
│ │ │ ├── route.go
│ │ │ └── test_helpers.go
│ │ ├── hashicorp/
│ │ │ ├── go-cleanhttp/
│ │ │ │ ├── LICENSE
│ │ │ │ ├── README.md
│ │ │ │ ├── cleanhttp.go
│ │ │ │ ├── doc.go
│ │ │ │ └── handlers.go
│ │ │ ├── go-multierror/
│ │ │ │ ├── .go-version
│ │ │ │ ├── CODEOWNERS
│ │ │ │ ├── LICENSE
│ │ │ │ ├── Makefile
│ │ │ │ ├── README.md
│ │ │ │ ├── append.go
│ │ │ │ ├── flatten.go
│ │ │ │ ├── format.go
│ │ │ │ ├── group.go
│ │ │ │ ├── multierror.go
│ │ │ │ ├── prefix.go
│ │ │ │ └── sort.go
│ │ │ └── go-retryablehttp/
│ │ │ ├── .gitignore
│ │ │ ├── .go-version
│ │ │ ├── .golangci.yml
│ │ │ ├── CHANGELOG.md
│ │ │ ├── CODEOWNERS
│ │ │ ├── LICENSE
│ │ │ ├── Makefile
│ │ │ ├── README.md
│ │ │ ├── cert_error_go119.go
│ │ │ ├── cert_error_go120.go
│ │ │ ├── client.go
│ │ │ └── roundtripper.go
│ │ ├── inconshreveable/
│ │ │ └── mousetrap/
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── trap_others.go
│ │ │ └── trap_windows.go
│ │ ├── klauspost/
│ │ │ ├── compress/
│ │ │ │ ├── .gitattributes
│ │ │ │ ├── .gitignore
│ │ │ │ ├── .goreleaser.yml
│ │ │ │ ├── LICENSE
│ │ │ │ ├── README.md
│ │ │ │ ├── SECURITY.md
│ │ │ │ ├── compressible.go
│ │ │ │ ├── flate/
│ │ │ │ │ ├── deflate.go
│ │ │ │ │ ├── dict_decoder.go
│ │ │ │ │ ├── fast_encoder.go
│ │ │ │ │ ├── huffman_bit_writer.go
│ │ │ │ │ ├── huffman_code.go
│ │ │ │ │ ├── huffman_sortByFreq.go
│ │ │ │ │ ├── huffman_sortByLiteral.go
│ │ │ │ │ ├── inflate.go
│ │ │ │ │ ├── inflate_gen.go
│ │ │ │ │ ├── level1.go
│ │ │ │ │ ├── level2.go
│ │ │ │ │ ├── level3.go
│ │ │ │ │ ├── level4.go
│ │ │ │ │ ├── level5.go
│ │ │ │ │ ├── level6.go
│ │ │ │ │ ├── matchlen_generic.go
│ │ │ │ │ ├── regmask_amd64.go
│ │ │ │ │ ├── regmask_other.go
│ │ │ │ │ ├── stateless.go
│ │ │ │ │ └── token.go
│ │ │ │ ├── fse/
│ │ │ │ │ ├── README.md
│ │ │ │ │ ├── bitreader.go
│ │ │ │ │ ├── bitwriter.go
│ │ │ │ │ ├── bytereader.go
│ │ │ │ │ ├── compress.go
│ │ │ │ │ ├── decompress.go
│ │ │ │ │ └── fse.go
│ │ │ │ ├── gen.sh
│ │ │ │ ├── huff0/
│ │ │ │ │ ├── .gitignore
│ │ │ │ │ ├── README.md
│ │ │ │ │ ├── bitreader.go
│ │ │ │ │ ├── bitwriter.go
│ │ │ │ │ ├── compress.go
│ │ │ │ │ ├── decompress.go
│ │ │ │ │ ├── decompress_amd64.go
│ │ │ │ │ ├── decompress_amd64.s
│ │ │ │ │ ├── decompress_generic.go
│ │ │ │ │ └── huff0.go
│ │ │ │ ├── internal/
│ │ │ │ │ ├── cpuinfo/
│ │ │ │ │ │ ├── cpuinfo.go
│ │ │ │ │ │ ├── cpuinfo_amd64.go
│ │ │ │ │ │ └── cpuinfo_amd64.s
│ │ │ │ │ ├── le/
│ │ │ │ │ │ ├── le.go
│ │ │ │ │ │ ├── unsafe_disabled.go
│ │ │ │ │ │ └── unsafe_enabled.go
│ │ │ │ │ └── snapref/
│ │ │ │ │ ├── LICENSE
│ │ │ │ │ ├── decode.go
│ │ │ │ │ ├── decode_other.go
│ │ │ │ │ ├── encode.go
│ │ │ │ │ ├── encode_other.go
│ │ │ │ │ └── snappy.go
│ │ │ │ ├── s2sx.mod
│ │ │ │ ├── s2sx.sum
│ │ │ │ └── zstd/
│ │ │ │ ├── README.md
│ │ │ │ ├── bitreader.go
│ │ │ │ ├── bitwriter.go
│ │ │ │ ├── blockdec.go
│ │ │ │ ├── blockenc.go
│ │ │ │ ├── blocktype_string.go
│ │ │ │ ├── bytebuf.go
│ │ │ │ ├── bytereader.go
│ │ │ │ ├── decodeheader.go
│ │ │ │ ├── decoder.go
│ │ │ │ ├── decoder_options.go
│ │ │ │ ├── dict.go
│ │ │ │ ├── enc_base.go
│ │ │ │ ├── enc_best.go
│ │ │ │ ├── enc_better.go
│ │ │ │ ├── enc_dfast.go
│ │ │ │ ├── enc_fast.go
│ │ │ │ ├── encoder.go
│ │ │ │ ├── encoder_options.go
│ │ │ │ ├── framedec.go
│ │ │ │ ├── frameenc.go
│ │ │ │ ├── fse_decoder.go
│ │ │ │ ├── fse_decoder_amd64.go
│ │ │ │ ├── fse_decoder_amd64.s
│ │ │ │ ├── fse_decoder_generic.go
│ │ │ │ ├── fse_encoder.go
│ │ │ │ ├── fse_predefined.go
│ │ │ │ ├── hash.go
│ │ │ │ ├── history.go
│ │ │ │ ├── internal/
│ │ │ │ │ └── xxhash/
│ │ │ │ │ ├── LICENSE.txt
│ │ │ │ │ ├── README.md
│ │ │ │ │ ├── xxhash.go
│ │ │ │ │ ├── xxhash_amd64.s
│ │ │ │ │ ├── xxhash_arm64.s
│ │ │ │ │ ├── xxhash_asm.go
│ │ │ │ │ ├── xxhash_other.go
│ │ │ │ │ └── xxhash_safe.go
│ │ │ │ ├── matchlen_amd64.go
│ │ │ │ ├── matchlen_amd64.s
│ │ │ │ ├── matchlen_generic.go
│ │ │ │ ├── seqdec.go
│ │ │ │ ├── seqdec_amd64.go
│ │ │ │ ├── seqdec_amd64.s
│ │ │ │ ├── seqdec_generic.go
│ │ │ │ ├── seqenc.go
│ │ │ │ ├── simple_go124.go
│ │ │ │ ├── snappy.go
│ │ │ │ ├── zip.go
│ │ │ │ └── zstd.go
│ │ │ └── pgzip/
│ │ │ ├── .gitignore
│ │ │ ├── .travis.yml
│ │ │ ├── GO_LICENSE
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── gunzip.go
│ │ │ └── gzip.go
│ │ ├── mattn/
│ │ │ ├── go-runewidth/
│ │ │ │ ├── LICENSE
│ │ │ │ ├── README.md
│ │ │ │ ├── benchstat.txt
│ │ │ │ ├── new.txt
│ │ │ │ ├── old.txt
│ │ │ │ ├── runewidth.go
│ │ │ │ ├── runewidth_appengine.go
│ │ │ │ ├── runewidth_js.go
│ │ │ │ ├── runewidth_posix.go
│ │ │ │ ├── runewidth_table.go
│ │ │ │ └── runewidth_windows.go
│ │ │ └── go-sqlite3/
│ │ │ ├── .codecov.yml
│ │ │ ├── .gitignore
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── backup.go
│ │ │ ├── callback.go
│ │ │ ├── convert.go
│ │ │ ├── doc.go
│ │ │ ├── error.go
│ │ │ ├── sqlite3-binding.c
│ │ │ ├── sqlite3-binding.h
│ │ │ ├── sqlite3.go
│ │ │ ├── sqlite3_context.go
│ │ │ ├── sqlite3_func_crypt.go
│ │ │ ├── sqlite3_go18.go
│ │ │ ├── sqlite3_libsqlite3.go
│ │ │ ├── sqlite3_load_extension.go
│ │ │ ├── sqlite3_load_extension_omit.go
│ │ │ ├── sqlite3_opt_allow_uri_authority.go
│ │ │ ├── sqlite3_opt_app_armor.go
│ │ │ ├── sqlite3_opt_column_metadata.go
│ │ │ ├── sqlite3_opt_foreign_keys.go
│ │ │ ├── sqlite3_opt_fts5.go
│ │ │ ├── sqlite3_opt_icu.go
│ │ │ ├── sqlite3_opt_introspect.go
│ │ │ ├── sqlite3_opt_math_functions.go
│ │ │ ├── sqlite3_opt_os_trace.go
│ │ │ ├── sqlite3_opt_percentile.go
│ │ │ ├── sqlite3_opt_preupdate.go
│ │ │ ├── sqlite3_opt_preupdate_hook.go
│ │ │ ├── sqlite3_opt_preupdate_omit.go
│ │ │ ├── sqlite3_opt_secure_delete.go
│ │ │ ├── sqlite3_opt_secure_delete_fast.go
│ │ │ ├── sqlite3_opt_serialize.go
│ │ │ ├── sqlite3_opt_serialize_omit.go
│ │ │ ├── sqlite3_opt_stat4.go
│ │ │ ├── sqlite3_opt_unlock_notify.c
│ │ │ ├── sqlite3_opt_unlock_notify.go
│ │ │ ├── sqlite3_opt_userauth.go
│ │ │ ├── sqlite3_opt_userauth_omit.go
│ │ │ ├── sqlite3_opt_vacuum_full.go
│ │ │ ├── sqlite3_opt_vacuum_incr.go
│ │ │ ├── sqlite3_opt_vtable.go
│ │ │ ├── sqlite3_other.go
│ │ │ ├── sqlite3_solaris.go
│ │ │ ├── sqlite3_trace.go
│ │ │ ├── sqlite3_type.go
│ │ │ ├── sqlite3_usleep_windows.go
│ │ │ ├── sqlite3_windows.go
│ │ │ ├── sqlite3ext.h
│ │ │ └── static_mock.go
│ │ ├── miekg/
│ │ │ └── pkcs11/
│ │ │ ├── .gitignore
│ │ │ ├── LICENSE
│ │ │ ├── Makefile.release
│ │ │ ├── README.md
│ │ │ ├── error.go
│ │ │ ├── params.go
│ │ │ ├── pkcs11.go
│ │ │ ├── pkcs11.h
│ │ │ ├── pkcs11f.h
│ │ │ ├── pkcs11go.h
│ │ │ ├── pkcs11t.h
│ │ │ ├── release.go
│ │ │ ├── softhsm.conf
│ │ │ ├── softhsm2.conf
│ │ │ ├── types.go
│ │ │ ├── vendor.go
│ │ │ └── zconst.go
│ │ ├── mistifyio/
│ │ │ └── go-zfs/
│ │ │ └── v4/
│ │ │ ├── .envrc
│ │ │ ├── .gitignore
│ │ │ ├── .golangci.yml
│ │ │ ├── .yamllint
│ │ │ ├── CHANGELOG.md
│ │ │ ├── CONTRIBUTING.md
│ │ │ ├── LICENSE
│ │ │ ├── Makefile
│ │ │ ├── README.md
│ │ │ ├── Vagrantfile
│ │ │ ├── error.go
│ │ │ ├── lint.mk
│ │ │ ├── rules.mk
│ │ │ ├── shell.nix
│ │ │ ├── utils.go
│ │ │ ├── utils_notsolaris.go
│ │ │ ├── utils_solaris.go
│ │ │ ├── zfs.go
│ │ │ └── zpool.go
│ │ ├── moby/
│ │ │ ├── docker-image-spec/
│ │ │ │ ├── LICENSE
│ │ │ │ └── specs-go/
│ │ │ │ └── v1/
│ │ │ │ └── image.go
│ │ │ ├── moby/
│ │ │ │ ├── api/
│ │ │ │ │ ├── LICENSE
│ │ │ │ │ └── types/
│ │ │ │ │ ├── blkiodev/
│ │ │ │ │ │ └── blkio.go
│ │ │ │ │ ├── build/
│ │ │ │ │ │ ├── build.go
│ │ │ │ │ │ ├── cache.go
│ │ │ │ │ │ └── disk_usage.go
│ │ │ │ │ ├── checkpoint/
│ │ │ │ │ │ ├── create_request.go
│ │ │ │ │ │ └── list.go
│ │ │ │ │ ├── common/
│ │ │ │ │ │ ├── error_response.go
│ │ │ │ │ │ ├── error_response_ext.go
│ │ │ │ │ │ └── id_response.go
│ │ │ │ │ ├── container/
│ │ │ │ │ │ ├── change_type.go
│ │ │ │ │ │ ├── change_types.go
│ │ │ │ │ │ ├── commit.go
│ │ │ │ │ │ ├── config.go
│ │ │ │ │ │ ├── container.go
│ │ │ │ │ │ ├── create_request.go
│ │ │ │ │ │ ├── create_response.go
│ │ │ │ │ │ ├── disk_usage.go
│ │ │ │ │ │ ├── errors.go
│ │ │ │ │ │ ├── exec.go
│ │ │ │ │ │ ├── exec_create_request.go
│ │ │ │ │ │ ├── exec_start_request.go
│ │ │ │ │ │ ├── filesystem_change.go
│ │ │ │ │ │ ├── health.go
│ │ │ │ │ │ ├── hostconfig.go
│ │ │ │ │ │ ├── hostconfig_unix.go
│ │ │ │ │ │ ├── hostconfig_windows.go
│ │ │ │ │ │ ├── network_settings.go
│ │ │ │ │ │ ├── port_summary.go
│ │ │ │ │ │ ├── state.go
│ │ │ │ │ │ ├── stats.go
│ │ │ │ │ │ ├── top_response.go
│ │ │ │ │ │ ├── update_response.go
│ │ │ │ │ │ ├── wait_exit_error.go
│ │ │ │ │ │ ├── wait_response.go
│ │ │ │ │ │ └── waitcondition.go
│ │ │ │ │ ├── events/
│ │ │ │ │ │ └── events.go
│ │ │ │ │ ├── image/
│ │ │ │ │ │ ├── build_identity.go
│ │ │ │ │ │ ├── delete_response.go
│ │ │ │ │ │ ├── disk_usage.go
│ │ │ │ │ │ ├── history_response_item.go
│ │ │ │ │ │ ├── identity.go
│ │ │ │ │ │ ├── image.go
│ │ │ │ │ │ ├── image_inspect.go
│ │ │ │ │ │ ├── manifest.go
│ │ │ │ │ │ ├── pull_identity.go
│ │ │ │ │ │ ├── signature_identity.go
│ │ │ │ │ │ ├── signature_timestamp.go
│ │ │ │ │ │ ├── signer_identity.go
│ │ │ │ │ │ └── summary.go
│ │ │ │ │ ├── jsonstream/
│ │ │ │ │ │ ├── json_error.go
│ │ │ │ │ │ ├── message.go
│ │ │ │ │ │ └── progress.go
│ │ │ │ │ ├── mount/
│ │ │ │ │ │ └── mount.go
│ │ │ │ │ ├── network/
│ │ │ │ │ │ ├── config_reference.go
│ │ │ │ │ │ ├── connect_request.go
│ │ │ │ │ │ ├── create_response.go
│ │ │ │ │ │ ├── disconnect_request.go
│ │ │ │ │ │ ├── endpoint.go
│ │ │ │ │ │ ├── endpoint_resource.go
│ │ │ │ │ │ ├── hwaddr.go
│ │ │ │ │ │ ├── inspect.go
│ │ │ │ │ │ ├── ipam.go
│ │ │ │ │ │ ├── ipam_status.go
│ │ │ │ │ │ ├── network.go
│ │ │ │ │ │ ├── network_types.go
│ │ │ │ │ │ ├── peer_info.go
│ │ │ │ │ │ ├── port.go
│ │ │ │ │ │ ├── service_info.go
│ │ │ │ │ │ ├── status.go
│ │ │ │ │ │ ├── subnet_status.go
│ │ │ │ │ │ ├── summary.go
│ │ │ │ │ │ └── task.go
│ │ │ │ │ ├── plugin/
│ │ │ │ │ │ ├── .gitignore
│ │ │ │ │ │ ├── capability.go
│ │ │ │ │ │ ├── device.go
│ │ │ │ │ │ ├── env.go
│ │ │ │ │ │ ├── mount.go
│ │ │ │ │ │ ├── plugin.go
│ │ │ │ │ │ └── plugin_responses.go
│ │ │ │ │ ├── registry/
│ │ │ │ │ │ ├── auth_response.go
│ │ │ │ │ │ ├── authconfig.go
│ │ │ │ │ │ ├── registry.go
│ │ │ │ │ │ └── search.go
│ │ │ │ │ ├── storage/
│ │ │ │ │ │ ├── driver_data.go
│ │ │ │ │ │ ├── root_f_s_storage.go
│ │ │ │ │ │ ├── root_f_s_storage_snapshot.go
│ │ │ │ │ │ └── storage.go
│ │ │ │ │ ├── swarm/
│ │ │ │ │ │ ├── common.go
│ │ │ │ │ │ ├── config.go
│ │ │ │ │ │ ├── container.go
│ │ │ │ │ │ ├── network.go
│ │ │ │ │ │ ├── node.go
│ │ │ │ │ │ ├── runtime.go
│ │ │ │ │ │ ├── secret.go
│ │ │ │ │ │ ├── service.go
│ │ │ │ │ │ ├── service_create_response.go
│ │ │ │ │ │ ├── service_update_response.go
│ │ │ │ │ │ ├── swarm.go
│ │ │ │ │ │ └── task.go
│ │ │ │ │ ├── system/
│ │ │ │ │ │ ├── disk_usage.go
│ │ │ │ │ │ ├── info.go
│ │ │ │ │ │ ├── runtime.go
│ │ │ │ │ │ └── version_response.go
│ │ │ │ │ ├── types.go
│ │ │ │ │ └── volume/
│ │ │ │ │ ├── cluster_volume.go
│ │ │ │ │ ├── create_request.go
│ │ │ │ │ ├── disk_usage.go
│ │ │ │ │ ├── list_response.go
│ │ │ │ │ ├── prune_report.go
│ │ │ │ │ └── volume.go
│ │ │ │ └── client/
│ │ │ │ ├── LICENSE
│ │ │ │ ├── README.md
│ │ │ │ ├── auth.go
│ │ │ │ ├── build_cancel.go
│ │ │ │ ├── build_prune.go
│ │ │ │ ├── checkpoint_create.go
│ │ │ │ ├── checkpoint_list.go
│ │ │ │ ├── checkpoint_remove.go
│ │ │ │ ├── client.go
│ │ │ │ ├── client_interfaces.go
│ │ │ │ ├── client_options.go
│ │ │ │ ├── client_responsehook.go
│ │ │ │ ├── client_unix.go
│ │ │ │ ├── client_windows.go
│ │ │ │ ├── config_create.go
│ │ │ │ ├── config_inspect.go
│ │ │ │ ├── config_list.go
│ │ │ │ ├── config_remove.go
│ │ │ │ ├── config_update.go
│ │ │ │ ├── container_attach.go
│ │ │ │ ├── container_commit.go
│ │ │ │ ├── container_copy.go
│ │ │ │ ├── container_create.go
│ │ │ │ ├── container_create_opts.go
│ │ │ │ ├── container_diff.go
│ │ │ │ ├── container_diff_opts.go
│ │ │ │ ├── container_exec.go
│ │ │ │ ├── container_export.go
│ │ │ │ ├── container_inspect.go
│ │ │ │ ├── container_kill.go
│ │ │ │ ├── container_list.go
│ │ │ │ ├── container_logs.go
│ │ │ │ ├── container_pause.go
│ │ │ │ ├── container_prune.go
│ │ │ │ ├── container_remove.go
│ │ │ │ ├── container_rename.go
│ │ │ │ ├── container_resize.go
│ │ │ │ ├── container_restart.go
│ │ │ │ ├── container_start.go
│ │ │ │ ├── container_stats.go
│ │ │ │ ├── container_stop.go
│ │ │ │ ├── container_top.go
│ │ │ │ ├── container_unpause.go
│ │ │ │ ├── container_update.go
│ │ │ │ ├── container_wait.go
│ │ │ │ ├── distribution_inspect.go
│ │ │ │ ├── envvars.go
│ │ │ │ ├── errors.go
│ │ │ │ ├── filters.go
│ │ │ │ ├── hijack.go
│ │ │ │ ├── image_build.go
│ │ │ │ ├── image_build_opts.go
│ │ │ │ ├── image_history.go
│ │ │ │ ├── image_history_opts.go
│ │ │ │ ├── image_import.go
│ │ │ │ ├── image_import_opts.go
│ │ │ │ ├── image_inspect.go
│ │ │ │ ├── image_inspect_opts.go
│ │ │ │ ├── image_list.go
│ │ │ │ ├── image_list_opts.go
│ │ │ │ ├── image_load.go
│ │ │ │ ├── image_load_opts.go
│ │ │ │ ├── image_prune.go
│ │ │ │ ├── image_pull.go
│ │ │ │ ├── image_pull_opts.go
│ │ │ │ ├── image_push.go
│ │ │ │ ├── image_push_opts.go
│ │ │ │ ├── image_remove.go
│ │ │ │ ├── image_remove_opts.go
│ │ │ │ ├── image_save.go
│ │ │ │ ├── image_save_opts.go
│ │ │ │ ├── image_search.go
│ │ │ │ ├── image_search_opts.go
│ │ │ │ ├── image_tag.go
│ │ │ │ ├── internal/
│ │ │ │ │ ├── json-stream.go
│ │ │ │ │ ├── jsonmessages.go
│ │ │ │ │ └── timestamp/
│ │ │ │ │ └── timestamp.go
│ │ │ │ ├── login.go
│ │ │ │ ├── network_connect.go
│ │ │ │ ├── network_create.go
│ │ │ │ ├── network_disconnect.go
│ │ │ │ ├── network_inspect.go
│ │ │ │ ├── network_inspect_opts.go
│ │ │ │ ├── network_list.go
│ │ │ │ ├── network_list_opts.go
│ │ │ │ ├── network_prune.go
│ │ │ │ ├── network_remove.go
│ │ │ │ ├── node_inspect.go
│ │ │ │ ├── node_list.go
│ │ │ │ ├── node_remove.go
│ │ │ │ ├── node_update.go
│ │ │ │ ├── ping.go
│ │ │ │ ├── pkg/
│ │ │ │ │ └── versions/
│ │ │ │ │ └── compare.go
│ │ │ │ ├── plugin_create.go
│ │ │ │ ├── plugin_disable.go
│ │ │ │ ├── plugin_enable.go
│ │ │ │ ├── plugin_inspect.go
│ │ │ │ ├── plugin_install.go
│ │ │ │ ├── plugin_list.go
│ │ │ │ ├── plugin_push.go
│ │ │ │ ├── plugin_remove.go
│ │ │ │ ├── plugin_set.go
│ │ │ │ ├── plugin_upgrade.go
│ │ │ │ ├── request.go
│ │ │ │ ├── secret_create.go
│ │ │ │ ├── secret_inspect.go
│ │ │ │ ├── secret_list.go
│ │ │ │ ├── secret_remove.go
│ │ │ │ ├── secret_update.go
│ │ │ │ ├── service_create.go
│ │ │ │ ├── service_inspect.go
│ │ │ │ ├── service_list.go
│ │ │ │ ├── service_logs.go
│ │ │ │ ├── service_remove.go
│ │ │ │ ├── service_update.go
│ │ │ │ ├── swarm_get_unlock_key.go
│ │ │ │ ├── swarm_init.go
│ │ │ │ ├── swarm_inspect.go
│ │ │ │ ├── swarm_join.go
│ │ │ │ ├── swarm_leave.go
│ │ │ │ ├── swarm_unlock.go
│ │ │ │ ├── swarm_update.go
│ │ │ │ ├── system_disk_usage.go
│ │ │ │ ├── system_events.go
│ │ │ │ ├── system_info.go
│ │ │ │ ├── task_inspect.go
│ │ │ │ ├── task_list.go
│ │ │ │ ├── task_logs.go
│ │ │ │ ├── utils.go
│ │ │ │ ├── version.go
│ │ │ │ ├── volume_create.go
│ │ │ │ ├── volume_inspect.go
│ │ │ │ ├── volume_list.go
│ │ │ │ ├── volume_prune.go
│ │ │ │ ├── volume_remove.go
│ │ │ │ └── volume_update.go
│ │ │ └── sys/
│ │ │ ├── capability/
│ │ │ │ ├── CHANGELOG.md
│ │ │ │ ├── LICENSE
│ │ │ │ ├── README.md
│ │ │ │ ├── capability.go
│ │ │ │ ├── capability_linux.go
│ │ │ │ ├── capability_noop.go
│ │ │ │ ├── enum.go
│ │ │ │ ├── enum_gen.go
│ │ │ │ └── syscall_linux.go
│ │ │ ├── mountinfo/
│ │ │ │ ├── LICENSE
│ │ │ │ ├── doc.go
│ │ │ │ ├── mounted_linux.go
│ │ │ │ ├── mounted_unix.go
│ │ │ │ ├── mountinfo.go
│ │ │ │ ├── mountinfo_bsd.go
│ │ │ │ ├── mountinfo_filters.go
│ │ │ │ ├── mountinfo_freebsdlike.go
│ │ │ │ ├── mountinfo_linux.go
│ │ │ │ ├── mountinfo_openbsd.go
│ │ │ │ ├── mountinfo_unsupported.go
│ │ │ │ └── mountinfo_windows.go
│ │ │ └── user/
│ │ │ ├── LICENSE
│ │ │ ├── idtools.go
│ │ │ ├── idtools_unix.go
│ │ │ ├── idtools_windows.go
│ │ │ ├── lookup_unix.go
│ │ │ ├── user.go
│ │ │ └── user_fuzzer.go
│ │ ├── modern-go/
│ │ │ └── concurrent/
│ │ │ ├── .gitignore
│ │ │ ├── .travis.yml
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── executor.go
│ │ │ ├── go_above_19.go
│ │ │ ├── go_below_19.go
│ │ │ ├── log.go
│ │ │ ├── test.sh
│ │ │ └── unbounded_executor.go
│ │ ├── opencontainers/
│ │ │ ├── go-digest/
│ │ │ │ ├── .mailmap
│ │ │ │ ├── .pullapprove.yml
│ │ │ │ ├── .travis.yml
│ │ │ │ ├── CONTRIBUTING.md
│ │ │ │ ├── LICENSE
│ │ │ │ ├── LICENSE.docs
│ │ │ │ ├── MAINTAINERS
│ │ │ │ ├── README.md
│ │ │ │ ├── algorithm.go
│ │ │ │ ├── digest.go
│ │ │ │ ├── digester.go
│ │ │ │ ├── doc.go
│ │ │ │ └── verifiers.go
│ │ │ ├── image-spec/
│ │ │ │ ├── LICENSE
│ │ │ │ ├── schema/
│ │ │ │ │ ├── LICENSE
│ │ │ │ │ ├── config-schema.json
│ │ │ │ │ ├── content-descriptor.json
│ │ │ │ │ ├── defs-descriptor.json
│ │ │ │ │ ├── defs.json
│ │ │ │ │ ├── doc.go
│ │ │ │ │ ├── error.go
│ │ │ │ │ ├── image-index-schema.json
│ │ │ │ │ ├── image-layout-schema.json
│ │ │ │ │ ├── image-manifest-schema.json
│ │ │ │ │ ├── schema.go
│ │ │ │ │ └── validator.go
│ │ │ │ └── specs-go/
│ │ │ │ ├── v1/
│ │ │ │ │ ├── annotations.go
│ │ │ │ │ ├── config.go
│ │ │ │ │ ├── descriptor.go
│ │ │ │ │ ├── index.go
│ │ │ │ │ ├── layout.go
│ │ │ │ │ ├── manifest.go
│ │ │ │ │ └── mediatype.go
│ │ │ │ ├── version.go
│ │ │ │ └── versioned.go
│ │ │ ├── image-tools/
│ │ │ │ ├── LICENSE
│ │ │ │ └── image/
│ │ │ │ ├── autodetect.go
│ │ │ │ ├── config.go
│ │ │ │ ├── descriptor.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── image.go
│ │ │ │ ├── index.go
│ │ │ │ ├── layout.go
│ │ │ │ ├── manifest.go
│ │ │ │ ├── project.go
│ │ │ │ └── walker.go
│ │ │ ├── runtime-spec/
│ │ │ │ ├── LICENSE
│ │ │ │ └── specs-go/
│ │ │ │ ├── config.go
│ │ │ │ ├── state.go
│ │ │ │ └── version.go
│ │ │ └── selinux/
│ │ │ ├── LICENSE
│ │ │ ├── go-selinux/
│ │ │ │ ├── doc.go
│ │ │ │ ├── label/
│ │ │ │ │ ├── label.go
│ │ │ │ │ ├── label_linux.go
│ │ │ │ │ └── label_stub.go
│ │ │ │ ├── selinux.go
│ │ │ │ ├── selinux_linux.go
│ │ │ │ ├── selinux_stub.go
│ │ │ │ └── xattrs_linux.go
│ │ │ └── pkg/
│ │ │ └── pwalkdir/
│ │ │ ├── README.md
│ │ │ └── pwalkdir.go
│ │ ├── pkg/
│ │ │ ├── browser/
│ │ │ │ ├── LICENSE
│ │ │ │ ├── README.md
│ │ │ │ ├── browser.go
│ │ │ │ ├── browser_darwin.go
│ │ │ │ ├── browser_freebsd.go
│ │ │ │ ├── browser_linux.go
│ │ │ │ ├── browser_netbsd.go
│ │ │ │ ├── browser_openbsd.go
│ │ │ │ ├── browser_unsupported.go
│ │ │ │ └── browser_windows.go
│ │ │ └── errors/
│ │ │ ├── .gitignore
│ │ │ ├── .travis.yml
│ │ │ ├── LICENSE
│ │ │ ├── Makefile
│ │ │ ├── README.md
│ │ │ ├── appveyor.yml
│ │ │ ├── errors.go
│ │ │ ├── go113.go
│ │ │ └── stack.go
│ │ ├── pmezard/
│ │ │ └── go-difflib/
│ │ │ ├── LICENSE
│ │ │ └── difflib/
│ │ │ └── difflib.go
│ │ ├── proglottis/
│ │ │ └── gpgme/
│ │ │ ├── .gitignore
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── data.go
│ │ │ ├── go_gpgme.c
│ │ │ ├── go_gpgme.h
│ │ │ ├── gpgme.go
│ │ │ ├── unset_agent_info.go
│ │ │ └── unset_agent_info_windows.go
│ │ ├── santhosh-tekuri/
│ │ │ └── jsonschema/
│ │ │ └── v6/
│ │ │ ├── .gitmodules
│ │ │ ├── .golangci.yml
│ │ │ ├── .pre-commit-hooks.yaml
│ │ │ ├── .swp
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── compiler.go
│ │ │ ├── content.go
│ │ │ ├── draft.go
│ │ │ ├── format.go
│ │ │ ├── go.work
│ │ │ ├── go.work.sum
│ │ │ ├── kind/
│ │ │ │ └── kind.go
│ │ │ ├── loader.go
│ │ │ ├── metaschemas/
│ │ │ │ ├── draft/
│ │ │ │ │ ├── 2019-09/
│ │ │ │ │ │ ├── meta/
│ │ │ │ │ │ │ ├── applicator
│ │ │ │ │ │ │ ├── content
│ │ │ │ │ │ │ ├── core
│ │ │ │ │ │ │ ├── format
│ │ │ │ │ │ │ ├── meta-data
│ │ │ │ │ │ │ └── validation
│ │ │ │ │ │ └── schema
│ │ │ │ │ └── 2020-12/
│ │ │ │ │ ├── meta/
│ │ │ │ │ │ ├── applicator
│ │ │ │ │ │ ├── content
│ │ │ │ │ │ ├── core
│ │ │ │ │ │ ├── format-annotation
│ │ │ │ │ │ ├── format-assertion
│ │ │ │ │ │ ├── meta-data
│ │ │ │ │ │ ├── unevaluated
│ │ │ │ │ │ └── validation
│ │ │ │ │ └── schema
│ │ │ │ ├── draft-04/
│ │ │ │ │ └── schema
│ │ │ │ ├── draft-06/
│ │ │ │ │ └── schema
│ │ │ │ └── draft-07/
│ │ │ │ └── schema
│ │ │ ├── objcompiler.go
│ │ │ ├── output.go
│ │ │ ├── position.go
│ │ │ ├── root.go
│ │ │ ├── roots.go
│ │ │ ├── schema.go
│ │ │ ├── util.go
│ │ │ ├── validator.go
│ │ │ └── vocab.go
│ │ ├── secure-systems-lab/
│ │ │ └── go-securesystemslib/
│ │ │ ├── LICENSE
│ │ │ └── encrypted/
│ │ │ └── encrypted.go
│ │ ├── sigstore/
│ │ │ ├── fulcio/
│ │ │ │ ├── COPYRIGHT.txt
│ │ │ │ ├── LICENSE
│ │ │ │ └── pkg/
│ │ │ │ ├── api/
│ │ │ │ │ └── client.go
│ │ │ │ └── certificate/
│ │ │ │ ├── doc.go
│ │ │ │ └── extensions.go
│ │ │ ├── protobuf-specs/
│ │ │ │ ├── COPYRIGHT.txt
│ │ │ │ ├── LICENSE
│ │ │ │ └── gen/
│ │ │ │ └── pb-go/
│ │ │ │ └── common/
│ │ │ │ └── v1/
│ │ │ │ └── sigstore_common.pb.go
│ │ │ └── sigstore/
│ │ │ ├── COPYRIGHT.txt
│ │ │ ├── LICENSE
│ │ │ └── pkg/
│ │ │ ├── cryptoutils/
│ │ │ │ ├── certificate.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── generic.go
│ │ │ │ ├── password.go
│ │ │ │ ├── privatekey.go
│ │ │ │ ├── publickey.go
│ │ │ │ ├── safestring.go
│ │ │ │ └── sans.go
│ │ │ ├── oauth/
│ │ │ │ ├── doc.go
│ │ │ │ └── interactive.go
│ │ │ ├── oauthflow/
│ │ │ │ ├── client_credentials.go
│ │ │ │ ├── device.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── flow.go
│ │ │ │ ├── interactive.go
│ │ │ │ └── pkce.go
│ │ │ └── signature/
│ │ │ ├── algorithm_registry.go
│ │ │ ├── doc.go
│ │ │ ├── ecdsa.go
│ │ │ ├── ed25519.go
│ │ │ ├── ed25519ph.go
│ │ │ ├── message.go
│ │ │ ├── options/
│ │ │ │ ├── context.go
│ │ │ │ ├── digest.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── keyversion.go
│ │ │ │ ├── loadoptions.go
│ │ │ │ ├── noop.go
│ │ │ │ ├── rand.go
│ │ │ │ ├── remoteverification.go
│ │ │ │ ├── rpcauth.go
│ │ │ │ └── signeropts.go
│ │ │ ├── options.go
│ │ │ ├── payload/
│ │ │ │ ├── doc.go
│ │ │ │ └── payload.go
│ │ │ ├── publickey.go
│ │ │ ├── rsapkcs1v15.go
│ │ │ ├── rsapss.go
│ │ │ ├── signer.go
│ │ │ ├── signerverifier.go
│ │ │ ├── util.go
│ │ │ └── verifier.go
│ │ ├── smallstep/
│ │ │ └── pkcs7/
│ │ │ ├── .gitignore
│ │ │ ├── LICENSE
│ │ │ ├── Makefile
│ │ │ ├── README.md
│ │ │ ├── ber.go
│ │ │ ├── decrypt.go
│ │ │ ├── encrypt.go
│ │ │ ├── internal/
│ │ │ │ └── legacy/
│ │ │ │ └── x509/
│ │ │ │ ├── debug.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── oid.go
│ │ │ │ ├── parser.go
│ │ │ │ ├── pkcs1.go
│ │ │ │ ├── verify.go
│ │ │ │ └── x509.go
│ │ │ ├── pkcs7.go
│ │ │ ├── sign.go
│ │ │ └── verify.go
│ │ ├── spf13/
│ │ │ ├── cobra/
│ │ │ │ ├── .gitignore
│ │ │ │ ├── .golangci.yml
│ │ │ │ ├── .mailmap
│ │ │ │ ├── CONDUCT.md
│ │ │ │ ├── CONTRIBUTING.md
│ │ │ │ ├── LICENSE.txt
│ │ │ │ ├── MAINTAINERS
│ │ │ │ ├── Makefile
│ │ │ │ ├── README.md
│ │ │ │ ├── SECURITY.md
│ │ │ │ ├── active_help.go
│ │ │ │ ├── args.go
│ │ │ │ ├── bash_completions.go
│ │ │ │ ├── bash_completionsV2.go
│ │ │ │ ├── cobra.go
│ │ │ │ ├── command.go
│ │ │ │ ├── command_notwin.go
│ │ │ │ ├── command_win.go
│ │ │ │ ├── completions.go
│ │ │ │ ├── fish_completions.go
│ │ │ │ ├── flag_groups.go
│ │ │ │ ├── powershell_completions.go
│ │ │ │ ├── shell_completions.go
│ │ │ │ └── zsh_completions.go
│ │ │ └── pflag/
│ │ │ ├── .editorconfig
│ │ │ ├── .gitignore
│ │ │ ├── .golangci.yaml
│ │ │ ├── .travis.yml
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── bool.go
│ │ │ ├── bool_func.go
│ │ │ ├── bool_slice.go
│ │ │ ├── bytes.go
│ │ │ ├── count.go
│ │ │ ├── duration.go
│ │ │ ├── duration_slice.go
│ │ │ ├── errors.go
│ │ │ ├── flag.go
│ │ │ ├── float32.go
│ │ │ ├── float32_slice.go
│ │ │ ├── float64.go
│ │ │ ├── float64_slice.go
│ │ │ ├── func.go
│ │ │ ├── golangflag.go
│ │ │ ├── int.go
│ │ │ ├── int16.go
│ │ │ ├── int32.go
│ │ │ ├── int32_slice.go
│ │ │ ├── int64.go
│ │ │ ├── int64_slice.go
│ │ │ ├── int8.go
│ │ │ ├── int_slice.go
│ │ │ ├── ip.go
│ │ │ ├── ip_slice.go
│ │ │ ├── ipmask.go
│ │ │ ├── ipnet.go
│ │ │ ├── ipnet_slice.go
│ │ │ ├── string.go
│ │ │ ├── string_array.go
│ │ │ ├── string_slice.go
│ │ │ ├── string_to_int.go
│ │ │ ├── string_to_int64.go
│ │ │ ├── string_to_string.go
│ │ │ ├── text.go
│ │ │ ├── time.go
│ │ │ ├── uint.go
│ │ │ ├── uint16.go
│ │ │ ├── uint32.go
│ │ │ ├── uint64.go
│ │ │ ├── uint8.go
│ │ │ └── uint_slice.go
│ │ ├── stefanberger/
│ │ │ └── go-pkcs11uri/
│ │ │ ├── .gitignore
│ │ │ ├── .travis.yml
│ │ │ ├── LICENSE
│ │ │ ├── Makefile
│ │ │ ├── README.md
│ │ │ └── pkcs11uri.go
│ │ ├── stretchr/
│ │ │ └── testify/
│ │ │ ├── LICENSE
│ │ │ ├── assert/
│ │ │ │ ├── assertion_compare.go
│ │ │ │ ├── assertion_format.go
│ │ │ │ ├── assertion_format.go.tmpl
│ │ │ │ ├── assertion_forward.go
│ │ │ │ ├── assertion_forward.go.tmpl
│ │ │ │ ├── assertion_order.go
│ │ │ │ ├── assertions.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── errors.go
│ │ │ │ ├── forward_assertions.go
│ │ │ │ ├── http_assertions.go
│ │ │ │ └── yaml/
│ │ │ │ ├── yaml_custom.go
│ │ │ │ ├── yaml_default.go
│ │ │ │ └── yaml_fail.go
│ │ │ ├── require/
│ │ │ │ ├── doc.go
│ │ │ │ ├── forward_requirements.go
│ │ │ │ ├── require.go
│ │ │ │ ├── require.go.tmpl
│ │ │ │ ├── require_forward.go
│ │ │ │ ├── require_forward.go.tmpl
│ │ │ │ └── requirements.go
│ │ │ └── suite/
│ │ │ ├── doc.go
│ │ │ ├── interfaces.go
│ │ │ ├── stats.go
│ │ │ └── suite.go
│ │ ├── sylabs/
│ │ │ └── sif/
│ │ │ └── v2/
│ │ │ ├── LICENSE.md
│ │ │ └── pkg/
│ │ │ └── sif/
│ │ │ ├── add.go
│ │ │ ├── arch.go
│ │ │ ├── buffer.go
│ │ │ ├── create.go
│ │ │ ├── delete.go
│ │ │ ├── descriptor.go
│ │ │ ├── descriptor_input.go
│ │ │ ├── load.go
│ │ │ ├── select.go
│ │ │ ├── set.go
│ │ │ └── sif.go
│ │ ├── tchap/
│ │ │ └── go-patricia/
│ │ │ └── v2/
│ │ │ ├── AUTHORS
│ │ │ ├── LICENSE
│ │ │ └── patricia/
│ │ │ ├── children.go
│ │ │ └── patricia.go
│ │ ├── ulikunitz/
│ │ │ └── xz/
│ │ │ ├── .gitignore
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── SECURITY.md
│ │ │ ├── TODO.md
│ │ │ ├── bits.go
│ │ │ ├── crc.go
│ │ │ ├── format.go
│ │ │ ├── fox-check-none.xz
│ │ │ ├── fox.xz
│ │ │ ├── internal/
│ │ │ │ ├── hash/
│ │ │ │ │ ├── cyclic_poly.go
│ │ │ │ │ ├── doc.go
│ │ │ │ │ ├── rabin_karp.go
│ │ │ │ │ └── roller.go
│ │ │ │ └── xlog/
│ │ │ │ └── xlog.go
│ │ │ ├── lzma/
│ │ │ │ ├── bintree.go
│ │ │ │ ├── bitops.go
│ │ │ │ ├── breader.go
│ │ │ │ ├── buffer.go
│ │ │ │ ├── bytewriter.go
│ │ │ │ ├── decoder.go
│ │ │ │ ├── decoderdict.go
│ │ │ │ ├── directcodec.go
│ │ │ │ ├── distcodec.go
│ │ │ │ ├── encoder.go
│ │ │ │ ├── encoderdict.go
│ │ │ │ ├── fox.lzma
│ │ │ │ ├── hashtable.go
│ │ │ │ ├── header.go
│ │ │ │ ├── header2.go
│ │ │ │ ├── lengthcodec.go
│ │ │ │ ├── literalcodec.go
│ │ │ │ ├── matchalgorithm.go
│ │ │ │ ├── operation.go
│ │ │ │ ├── prob.go
│ │ │ │ ├── properties.go
│ │ │ │ ├── rangecodec.go
│ │ │ │ ├── reader.go
│ │ │ │ ├── reader2.go
│ │ │ │ ├── state.go
│ │ │ │ ├── treecodecs.go
│ │ │ │ ├── writer.go
│ │ │ │ └── writer2.go
│ │ │ ├── lzmafilter.go
│ │ │ ├── make-docs
│ │ │ ├── none-check.go
│ │ │ ├── reader.go
│ │ │ └── writer.go
│ │ ├── vbatts/
│ │ │ └── tar-split/
│ │ │ ├── LICENSE
│ │ │ ├── archive/
│ │ │ │ └── tar/
│ │ │ │ ├── common.go
│ │ │ │ ├── format.go
│ │ │ │ ├── reader.go
│ │ │ │ ├── stat_actime1.go
│ │ │ │ ├── stat_actime2.go
│ │ │ │ ├── stat_unix.go
│ │ │ │ ├── strconv.go
│ │ │ │ └── writer.go
│ │ │ └── tar/
│ │ │ ├── asm/
│ │ │ │ ├── README.md
│ │ │ │ ├── assemble.go
│ │ │ │ ├── disassemble.go
│ │ │ │ ├── doc.go
│ │ │ │ └── iterate.go
│ │ │ └── storage/
│ │ │ ├── doc.go
│ │ │ ├── entry.go
│ │ │ ├── getter.go
│ │ │ └── packer.go
│ │ └── vbauerster/
│ │ └── mpb/
│ │ └── v8/
│ │ ├── .gitignore
│ │ ├── CONTRIBUTING
│ │ ├── README.md
│ │ ├── UNLICENSE
│ │ ├── bar.go
│ │ ├── bar_filler.go
│ │ ├── bar_filler_bar.go
│ │ ├── bar_filler_nop.go
│ │ ├── bar_filler_spinner.go
│ │ ├── bar_heap.go
│ │ ├── bar_option.go
│ │ ├── container_option.go
│ │ ├── cwriter/
│ │ │ ├── doc.go
│ │ │ ├── util_bsd.go
│ │ │ ├── util_linux.go
│ │ │ ├── util_solaris.go
│ │ │ ├── util_zos.go
│ │ │ ├── writer.go
│ │ │ ├── writer_posix.go
│ │ │ └── writer_windows.go
│ │ ├── decor/
│ │ │ ├── any.go
│ │ │ ├── counters.go
│ │ │ ├── decorator.go
│ │ │ ├── doc.go
│ │ │ ├── elapsed.go
│ │ │ ├── eta.go
│ │ │ ├── meta.go
│ │ │ ├── moving_average.go
│ │ │ ├── name.go
│ │ │ ├── on_abort.go
│ │ │ ├── on_abort_or_on_complete.go
│ │ │ ├── on_complete.go
│ │ │ ├── on_complete_or_on_abort.go
│ │ │ ├── on_condition.go
│ │ │ ├── percentage.go
│ │ │ ├── size_type.go
│ │ │ ├── sizeb1000_string.go
│ │ │ ├── sizeb1024_string.go
│ │ │ ├── speed.go
│ │ │ └── spinner.go
│ │ ├── doc.go
│ │ ├── heap_manager.go
│ │ ├── internal/
│ │ │ ├── percentage.go
│ │ │ └── width.go
│ │ ├── progress.go
│ │ ├── proxyreader.go
│ │ └── proxywriter.go
│ ├── go.opentelemetry.io/
│ │ ├── auto/
│ │ │ └── sdk/
│ │ │ ├── CONTRIBUTING.md
│ │ │ ├── LICENSE
│ │ │ ├── VERSIONING.md
│ │ │ ├── doc.go
│ │ │ ├── internal/
│ │ │ │ └── telemetry/
│ │ │ │ ├── attr.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── id.go
│ │ │ │ ├── number.go
│ │ │ │ ├── resource.go
│ │ │ │ ├── scope.go
│ │ │ │ ├── span.go
│ │ │ │ ├── status.go
│ │ │ │ ├── traces.go
│ │ │ │ └── value.go
│ │ │ ├── limit.go
│ │ │ ├── span.go
│ │ │ ├── tracer.go
│ │ │ └── tracer_provider.go
│ │ ├── contrib/
│ │ │ └── instrumentation/
│ │ │ └── net/
│ │ │ └── http/
│ │ │ └── otelhttp/
│ │ │ ├── LICENSE
│ │ │ ├── common.go
│ │ │ ├── config.go
│ │ │ ├── doc.go
│ │ │ ├── handler.go
│ │ │ ├── internal/
│ │ │ │ ├── request/
│ │ │ │ │ ├── body_wrapper.go
│ │ │ │ │ ├── gen.go
│ │ │ │ │ └── resp_writer_wrapper.go
│ │ │ │ └── semconv/
│ │ │ │ ├── client.go
│ │ │ │ ├── gen.go
│ │ │ │ ├── server.go
│ │ │ │ └── util.go
│ │ │ ├── labeler.go
│ │ │ ├── start_time_context.go
│ │ │ ├── transport.go
│ │ │ └── version.go
│ │ └── otel/
│ │ ├── .clomonitor.yml
│ │ ├── .codespellignore
│ │ ├── .codespellrc
│ │ ├── .gitattributes
│ │ ├── .gitignore
│ │ ├── .golangci.yml
│ │ ├── .lycheeignore
│ │ ├── .markdownlint.yaml
│ │ ├── CHANGELOG.md
│ │ ├── CODEOWNERS
│ │ ├── CONTRIBUTING.md
│ │ ├── LICENSE
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── RELEASING.md
│ │ ├── SECURITY-INSIGHTS.yml
│ │ ├── VERSIONING.md
│ │ ├── attribute/
│ │ │ ├── README.md
│ │ │ ├── doc.go
│ │ │ ├── encoder.go
│ │ │ ├── filter.go
│ │ │ ├── hash.go
│ │ │ ├── internal/
│ │ │ │ ├── attribute.go
│ │ │ │ └── xxhash/
│ │ │ │ └── xxhash.go
│ │ │ ├── iterator.go
│ │ │ ├── key.go
│ │ │ ├── kv.go
│ │ │ ├── rawhelpers.go
│ │ │ ├── set.go
│ │ │ ├── type_string.go
│ │ │ └── value.go
│ │ ├── baggage/
│ │ │ ├── README.md
│ │ │ ├── baggage.go
│ │ │ ├── context.go
│ │ │ └── doc.go
│ │ ├── codes/
│ │ │ ├── README.md
│ │ │ ├── codes.go
│ │ │ └── doc.go
│ │ ├── dependencies.Dockerfile
│ │ ├── doc.go
│ │ ├── error_handler.go
│ │ ├── handler.go
│ │ ├── internal/
│ │ │ ├── baggage/
│ │ │ │ ├── baggage.go
│ │ │ │ └── context.go
│ │ │ └── global/
│ │ │ ├── handler.go
│ │ │ ├── instruments.go
│ │ │ ├── internal_logging.go
│ │ │ ├── meter.go
│ │ │ ├── propagator.go
│ │ │ ├── state.go
│ │ │ └── trace.go
│ │ ├── internal_logging.go
│ │ ├── metric/
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── asyncfloat64.go
│ │ │ ├── asyncint64.go
│ │ │ ├── config.go
│ │ │ ├── doc.go
│ │ │ ├── embedded/
│ │ │ │ ├── README.md
│ │ │ │ └── embedded.go
│ │ │ ├── instrument.go
│ │ │ ├── meter.go
│ │ │ ├── noop/
│ │ │ │ ├── README.md
│ │ │ │ └── noop.go
│ │ │ ├── syncfloat64.go
│ │ │ └── syncint64.go
│ │ ├── metric.go
│ │ ├── propagation/
│ │ │ ├── README.md
│ │ │ ├── baggage.go
│ │ │ ├── doc.go
│ │ │ ├── propagation.go
│ │ │ └── trace_context.go
│ │ ├── propagation.go
│ │ ├── renovate.json
│ │ ├── requirements.txt
│ │ ├── semconv/
│ │ │ ├── v1.37.0/
│ │ │ │ ├── MIGRATION.md
│ │ │ │ ├── README.md
│ │ │ │ ├── attribute_group.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── error_type.go
│ │ │ │ ├── exception.go
│ │ │ │ └── schema.go
│ │ │ └── v1.39.0/
│ │ │ ├── MIGRATION.md
│ │ │ ├── README.md
│ │ │ ├── attribute_group.go
│ │ │ ├── doc.go
│ │ │ ├── error_type.go
│ │ │ ├── exception.go
│ │ │ ├── httpconv/
│ │ │ │ └── metric.go
│ │ │ └── schema.go
│ │ ├── trace/
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── auto.go
│ │ │ ├── config.go
│ │ │ ├── context.go
│ │ │ ├── doc.go
│ │ │ ├── embedded/
│ │ │ │ ├── README.md
│ │ │ │ └── embedded.go
│ │ │ ├── hex.go
│ │ │ ├── internal/
│ │ │ │ └── telemetry/
│ │ │ │ ├── attr.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── id.go
│ │ │ │ ├── number.go
│ │ │ │ ├── resource.go
│ │ │ │ ├── scope.go
│ │ │ │ ├── span.go
│ │ │ │ ├── status.go
│ │ │ │ ├── traces.go
│ │ │ │ └── value.go
│ │ │ ├── nonrecording.go
│ │ │ ├── noop/
│ │ │ │ ├── README.md
│ │ │ │ └── noop.go
│ │ │ ├── noop.go
│ │ │ ├── provider.go
│ │ │ ├── span.go
│ │ │ ├── trace.go
│ │ │ ├── tracer.go
│ │ │ └── tracestate.go
│ │ ├── trace.go
│ │ ├── verify_released_changelog.sh
│ │ ├── version.go
│ │ └── versions.yaml
│ ├── go.podman.io/
│ │ ├── common/
│ │ │ ├── LICENSE
│ │ │ └── pkg/
│ │ │ ├── auth/
│ │ │ │ ├── auth.go
│ │ │ │ └── cli.go
│ │ │ ├── capabilities/
│ │ │ │ └── capabilities.go
│ │ │ ├── completion/
│ │ │ │ └── completion.go
│ │ │ ├── flag/
│ │ │ │ └── flag.go
│ │ │ ├── json-proxy/
│ │ │ │ ├── handler.go
│ │ │ │ ├── proxy.go
│ │ │ │ ├── proxy_unix.go
│ │ │ │ ├── types.go
│ │ │ │ ├── types_unix.go
│ │ │ │ └── utils.go
│ │ │ ├── password/
│ │ │ │ ├── password_supported.go
│ │ │ │ └── password_windows.go
│ │ │ ├── report/
│ │ │ │ ├── camelcase/
│ │ │ │ │ ├── LICENSE.md
│ │ │ │ │ ├── README.md
│ │ │ │ │ └── camelcase.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── formatter.go
│ │ │ │ ├── template.go
│ │ │ │ ├── validate.go
│ │ │ │ └── writer.go
│ │ │ └── retry/
│ │ │ ├── retry.go
│ │ │ ├── retry_linux.go
│ │ │ └── retry_unsupported.go
│ │ ├── image/
│ │ │ └── v5/
│ │ │ ├── LICENSE
│ │ │ ├── copy/
│ │ │ │ ├── blob.go
│ │ │ │ ├── compression.go
│ │ │ │ ├── copy.go
│ │ │ │ ├── digesting_reader.go
│ │ │ │ ├── encryption.go
│ │ │ │ ├── manifest.go
│ │ │ │ ├── multiple.go
│ │ │ │ ├── progress_bars.go
│ │ │ │ ├── progress_channel.go
│ │ │ │ ├── sign.go
│ │ │ │ └── single.go
│ │ │ ├── directory/
│ │ │ │ ├── directory_dest.go
│ │ │ │ ├── directory_src.go
│ │ │ │ ├── directory_transport.go
│ │ │ │ ├── explicitfilepath/
│ │ │ │ │ └── path.go
│ │ │ │ └── version.go
│ │ │ ├── docker/
│ │ │ │ ├── archive/
│ │ │ │ │ ├── dest.go
│ │ │ │ │ ├── reader.go
│ │ │ │ │ ├── src.go
│ │ │ │ │ ├── transport.go
│ │ │ │ │ └── writer.go
│ │ │ │ ├── body_reader.go
│ │ │ │ ├── cache.go
│ │ │ │ ├── daemon/
│ │ │ │ │ ├── client.go
│ │ │ │ │ ├── daemon_dest.go
│ │ │ │ │ ├── daemon_src.go
│ │ │ │ │ └── daemon_transport.go
│ │ │ │ ├── distribution_error.go
│ │ │ │ ├── docker_client.go
│ │ │ │ ├── docker_image.go
│ │ │ │ ├── docker_image_dest.go
│ │ │ │ ├── docker_image_src.go
│ │ │ │ ├── docker_transport.go
│ │ │ │ ├── errors.go
│ │ │ │ ├── internal/
│ │ │ │ │ └── tarfile/
│ │ │ │ │ ├── dest.go
│ │ │ │ │ ├── reader.go
│ │ │ │ │ ├── src.go
│ │ │ │ │ ├── types.go
│ │ │ │ │ └── writer.go
│ │ │ │ ├── paths_common.go
│ │ │ │ ├── paths_freebsd.go
│ │ │ │ ├── policyconfiguration/
│ │ │ │ │ └── naming.go
│ │ │ │ ├── reference/
│ │ │ │ │ ├── README.md
│ │ │ │ │ ├── helpers.go
│ │ │ │ │ ├── normalize.go
│ │ │ │ │ ├── reference.go
│ │ │ │ │ ├── regexp-additions.go
│ │ │ │ │ └── regexp.go
│ │ │ │ ├── registries_d.go
│ │ │ │ └── wwwauthenticate.go
│ │ │ ├── image/
│ │ │ │ ├── docker_schema2.go
│ │ │ │ ├── sourced.go
│ │ │ │ └── unparsed.go
│ │ │ ├── internal/
│ │ │ │ ├── blobinfocache/
│ │ │ │ │ ├── blobinfocache.go
│ │ │ │ │ └── types.go
│ │ │ │ ├── digests/
│ │ │ │ │ └── digests.go
│ │ │ │ ├── image/
│ │ │ │ │ ├── digest_validation.go
│ │ │ │ │ ├── docker_list.go
│ │ │ │ │ ├── docker_schema1.go
│ │ │ │ │ ├── docker_schema2.go
│ │ │ │ │ ├── manifest.go
│ │ │ │ │ ├── memory.go
│ │ │ │ │ ├── oci.go
│ │ │ │ │ ├── oci_index.go
│ │ │ │ │ ├── sourced.go
│ │ │ │ │ └── unparsed.go
│ │ │ │ ├── imagedestination/
│ │ │ │ │ ├── impl/
│ │ │ │ │ │ ├── compat.go
│ │ │ │ │ │ ├── helpers.go
│ │ │ │ │ │ └── properties.go
│ │ │ │ │ ├── stubs/
│ │ │ │ │ │ ├── original_oci_config.go
│ │ │ │ │ │ ├── put_blob_partial.go
│ │ │ │ │ │ ├── signatures.go
│ │ │ │ │ │ └── stubs.go
│ │ │ │ │ └── wrapper.go
│ │ │ │ ├── imagesource/
│ │ │ │ │ ├── impl/
│ │ │ │ │ │ ├── compat.go
│ │ │ │ │ │ ├── layer_infos.go
│ │ │ │ │ │ ├── properties.go
│ │ │ │ │ │ └── signatures.go
│ │ │ │ │ ├── stubs/
│ │ │ │ │ │ ├── get_blob_at.go
│ │ │ │ │ │ └── stubs.go
│ │ │ │ │ └── wrapper.go
│ │ │ │ ├── iolimits/
│ │ │ │ │ └── iolimits.go
│ │ │ │ ├── manifest/
│ │ │ │ │ ├── common.go
│ │ │ │ │ ├── docker_schema2.go
│ │ │ │ │ ├── docker_schema2_list.go
│ │ │ │ │ ├── errors.go
│ │ │ │ │ ├── list.go
│ │ │ │ │ ├── manifest.go
│ │ │ │ │ └── oci_index.go
│ │ │ │ ├── multierr/
│ │ │ │ │ └── multierr.go
│ │ │ │ ├── pkg/
│ │ │ │ │ └── platform/
│ │ │ │ │ └── platform_matcher.go
│ │ │ │ ├── private/
│ │ │ │ │ └── private.go
│ │ │ │ ├── putblobdigest/
│ │ │ │ │ └── put_blob_digest.go
│ │ │ │ ├── rootless/
│ │ │ │ │ └── rootless.go
│ │ │ │ ├── set/
│ │ │ │ │ └── set.go
│ │ │ │ ├── signature/
│ │ │ │ │ ├── signature.go
│ │ │ │ │ ├── sigstore.go
│ │ │ │ │ └── simple.go
│ │ │ │ ├── signer/
│ │ │ │ │ └── signer.go
│ │ │ │ ├── streamdigest/
│ │ │ │ │ └── stream_digest.go
│ │ │ │ ├── tmpdir/
│ │ │ │ │ └── tmpdir.go
│ │ │ │ ├── unparsedimage/
│ │ │ │ │ └── wrapper.go
│ │ │ │ ├── uploadreader/
│ │ │ │ │ └── upload_reader.go
│ │ │ │ └── useragent/
│ │ │ │ └── useragent.go
│ │ │ ├── manifest/
│ │ │ │ ├── common.go
│ │ │ │ ├── docker_schema1.go
│ │ │ │ ├── docker_schema2.go
│ │ │ │ ├── docker_schema2_list.go
│ │ │ │ ├── list.go
│ │ │ │ ├── manifest.go
│ │ │ │ ├── oci.go
│ │ │ │ └── oci_index.go
│ │ │ ├── oci/
│ │ │ │ ├── archive/
│ │ │ │ │ ├── oci_dest.go
│ │ │ │ │ ├── oci_src.go
│ │ │ │ │ └── oci_transport.go
│ │ │ │ ├── internal/
│ │ │ │ │ └── oci_util.go
│ │ │ │ └── layout/
│ │ │ │ ├── oci_delete.go
│ │ │ │ ├── oci_dest.go
│ │ │ │ ├── oci_src.go
│ │ │ │ ├── oci_transport.go
│ │ │ │ └── reader.go
│ │ │ ├── openshift/
│ │ │ │ ├── openshift-copies.go
│ │ │ │ ├── openshift.go
│ │ │ │ ├── openshift_dest.go
│ │ │ │ ├── openshift_src.go
│ │ │ │ └── openshift_transport.go
│ │ │ ├── pkg/
│ │ │ │ ├── blobinfocache/
│ │ │ │ │ ├── default.go
│ │ │ │ │ ├── internal/
│ │ │ │ │ │ └── prioritize/
│ │ │ │ │ │ └── prioritize.go
│ │ │ │ │ ├── memory/
│ │ │ │ │ │ └── memory.go
│ │ │ │ │ ├── none/
│ │ │ │ │ │ └── none.go
│ │ │ │ │ └── sqlite/
│ │ │ │ │ └── sqlite.go
│ │ │ │ ├── cli/
│ │ │ │ │ ├── basetls/
│ │ │ │ │ │ ├── basetls.go
│ │ │ │ │ │ └── tlsdetails/
│ │ │ │ │ │ └── tlsdetails.go
│ │ │ │ │ ├── passphrase.go
│ │ │ │ │ └── sigstore/
│ │ │ │ │ ├── params/
│ │ │ │ │ │ └── sigstore.go
│ │ │ │ │ └── sigstore.go
│ │ │ │ ├── compression/
│ │ │ │ │ ├── compression.go
│ │ │ │ │ ├── internal/
│ │ │ │ │ │ └── types.go
│ │ │ │ │ ├── types/
│ │ │ │ │ │ └── types.go
│ │ │ │ │ └── zstd.go
│ │ │ │ ├── docker/
│ │ │ │ │ └── config/
│ │ │ │ │ └── config.go
│ │ │ │ ├── strslice/
│ │ │ │ │ ├── README.md
│ │ │ │ │ └── strslice.go
│ │ │ │ ├── sysregistriesv2/
│ │ │ │ │ ├── paths_common.go
│ │ │ │ │ ├── paths_freebsd.go
│ │ │ │ │ ├── shortnames.go
│ │ │ │ │ └── system_registries_v2.go
│ │ │ │ └── tlsclientconfig/
│ │ │ │ └── tlsclientconfig.go
│ │ │ ├── sif/
│ │ │ │ ├── load.go
│ │ │ │ ├── src.go
│ │ │ │ └── transport.go
│ │ │ ├── signature/
│ │ │ │ ├── docker.go
│ │ │ │ ├── fulcio_cert.go
│ │ │ │ ├── internal/
│ │ │ │ │ ├── errors.go
│ │ │ │ │ ├── json.go
│ │ │ │ │ ├── rekor_api_types.go
│ │ │ │ │ ├── rekor_set.go
│ │ │ │ │ ├── sequoia/
│ │ │ │ │ │ ├── gosequoia.c
│ │ │ │ │ │ ├── gosequoia.h
│ │ │ │ │ │ ├── gosequoiafuncs.h
│ │ │ │ │ │ ├── sequoia.go
│ │ │ │ │ │ └── sequoia.h
│ │ │ │ │ └── sigstore_payload.go
│ │ │ │ ├── mechanism.go
│ │ │ │ ├── mechanism_gpgme.go
│ │ │ │ ├── mechanism_gpgme_only.go
│ │ │ │ ├── mechanism_openpgp.go
│ │ │ │ ├── mechanism_sequoia.go
│ │ │ │ ├── pki_cert.go
│ │ │ │ ├── policy_config.go
│ │ │ │ ├── policy_config_sigstore.go
│ │ │ │ ├── policy_eval.go
│ │ │ │ ├── policy_eval_baselayer.go
│ │ │ │ ├── policy_eval_signedby.go
│ │ │ │ ├── policy_eval_sigstore.go
│ │ │ │ ├── policy_eval_simple.go
│ │ │ │ ├── policy_paths_common.go
│ │ │ │ ├── policy_paths_freebsd.go
│ │ │ │ ├── policy_reference_match.go
│ │ │ │ ├── policy_types.go
│ │ │ │ ├── signer/
│ │ │ │ │ └── signer.go
│ │ │ │ ├── sigstore/
│ │ │ │ │ ├── copied.go
│ │ │ │ │ ├── fulcio/
│ │ │ │ │ │ └── fulcio.go
│ │ │ │ │ ├── generate.go
│ │ │ │ │ ├── internal/
│ │ │ │ │ │ └── signer.go
│ │ │ │ │ ├── rekor/
│ │ │ │ │ │ ├── leveled_logger.go
│ │ │ │ │ │ ├── openapi_infra.go
│ │ │ │ │ │ ├── rekor.go
│ │ │ │ │ │ ├── rekor_api.go
│ │ │ │ │ │ └── rekor_api_types.go
│ │ │ │ │ └── signer.go
│ │ │ │ ├── simple.go
│ │ │ │ ├── simplesequoia/
│ │ │ │ │ ├── mechanism.go
│ │ │ │ │ ├── options.go
│ │ │ │ │ ├── signer.go
│ │ │ │ │ └── signer_stub.go
│ │ │ │ └── simplesigning/
│ │ │ │ └── signer.go
│ │ │ ├── storage/
│ │ │ │ ├── storage_dest.go
│ │ │ │ ├── storage_image.go
│ │ │ │ ├── storage_reference.go
│ │ │ │ ├── storage_src.go
│ │ │ │ └── storage_transport.go
│ │ │ ├── tarball/
│ │ │ │ ├── doc.go
│ │ │ │ ├── tarball_reference.go
│ │ │ │ ├── tarball_src.go
│ │ │ │ └── tarball_transport.go
│ │ │ ├── transports/
│ │ │ │ ├── alltransports/
│ │ │ │ │ ├── alltransports.go
│ │ │ │ │ ├── docker_daemon.go
│ │ │ │ │ ├── docker_daemon_stub.go
│ │ │ │ │ ├── storage.go
│ │ │ │ │ └── storage_stub.go
│ │ │ │ ├── stub.go
│ │ │ │ └── transports.go
│ │ │ ├── types/
│ │ │ │ └── types.go
│ │ │ └── version/
│ │ │ └── version.go
│ │ └── storage/
│ │ ├── .dockerignore
│ │ ├── .gitignore
│ │ ├── .golangci.yml
│ │ ├── .mailmap
│ │ ├── AUTHORS
│ │ ├── LICENSE
│ │ ├── Makefile
│ │ ├── NOTICE
│ │ ├── OWNERS
│ │ ├── README.md
│ │ ├── VERSION
│ │ ├── check.go
│ │ ├── containers.go
│ │ ├── deprecated.go
│ │ ├── drivers/
│ │ │ ├── btrfs/
│ │ │ │ ├── btrfs.go
│ │ │ │ ├── dummy_unsupported.go
│ │ │ │ └── version.go
│ │ │ ├── chown.go
│ │ │ ├── chown_darwin.go
│ │ │ ├── chown_unix.go
│ │ │ ├── chown_windows.go
│ │ │ ├── chroot_unix.go
│ │ │ ├── chroot_windows.go
│ │ │ ├── copy/
│ │ │ │ ├── copy_linux.go
│ │ │ │ └── copy_unsupported.go
│ │ │ ├── counter.go
│ │ │ ├── driver.go
│ │ │ ├── driver_darwin.go
│ │ │ ├── driver_freebsd.go
│ │ │ ├── driver_linux.go
│ │ │ ├── driver_solaris.go
│ │ │ ├── driver_unsupported.go
│ │ │ ├── fsdiff.go
│ │ │ ├── jsoniter.go
│ │ │ ├── overlay/
│ │ │ │ ├── check.go
│ │ │ │ ├── check_116.go
│ │ │ │ ├── composefs.go
│ │ │ │ ├── jsoniter.go
│ │ │ │ ├── mount.go
│ │ │ │ ├── overlay.go
│ │ │ │ ├── overlay_disk_quota.go
│ │ │ │ ├── overlay_disk_quota_unsupported.go
│ │ │ │ ├── overlay_unsupported.go
│ │ │ │ └── randomid.go
│ │ │ ├── overlayutils/
│ │ │ │ └── overlayutils.go
│ │ │ ├── quota/
│ │ │ │ ├── projectquota.go
│ │ │ │ ├── projectquota_supported.go
│ │ │ │ └── projectquota_unsupported.go
│ │ │ ├── register/
│ │ │ │ ├── register_btrfs.go
│ │ │ │ ├── register_overlay.go
│ │ │ │ ├── register_vfs.go
│ │ │ │ └── register_zfs.go
│ │ │ ├── vfs/
│ │ │ │ ├── copy_linux.go
│ │ │ │ ├── copy_unsupported.go
│ │ │ │ └── driver.go
│ │ │ └── zfs/
│ │ │ ├── MAINTAINERS
│ │ │ ├── zfs.go
│ │ │ ├── zfs_freebsd.go
│ │ │ ├── zfs_linux.go
│ │ │ └── zfs_unsupported.go
│ │ ├── errors.go
│ │ ├── idset.go
│ │ ├── images.go
│ │ ├── internal/
│ │ │ ├── dedup/
│ │ │ │ ├── dedup.go
│ │ │ │ ├── dedup_linux.go
│ │ │ │ └── dedup_unsupported.go
│ │ │ ├── rawfilelock/
│ │ │ │ ├── rawfilelock.go
│ │ │ │ ├── rawfilelock_unix.go
│ │ │ │ └── rawfilelock_windows.go
│ │ │ ├── staging_lockfile/
│ │ │ │ └── staging_lockfile.go
│ │ │ └── tempdir/
│ │ │ └── tempdir.go
│ │ ├── jsoniter.go
│ │ ├── layers.go
│ │ ├── lockfile_compat.go
│ │ ├── pkg/
│ │ │ ├── archive/
│ │ │ │ ├── README.md
│ │ │ │ ├── archive.go
│ │ │ │ ├── archive_110.go
│ │ │ │ ├── archive_19.go
│ │ │ │ ├── archive_bsd.go
│ │ │ │ ├── archive_linux.go
│ │ │ │ ├── archive_other.go
│ │ │ │ ├── archive_unix.go
│ │ │ │ ├── archive_windows.go
│ │ │ │ ├── archive_zstd.go
│ │ │ │ ├── changes.go
│ │ │ │ ├── changes_linux.go
│ │ │ │ ├── changes_other.go
│ │ │ │ ├── changes_unix.go
│ │ │ │ ├── changes_windows.go
│ │ │ │ ├── copy.go
│ │ │ │ ├── copy_unix.go
│ │ │ │ ├── copy_windows.go
│ │ │ │ ├── diff.go
│ │ │ │ ├── fflags_bsd.go
│ │ │ │ ├── fflags_unsupported.go
│ │ │ │ ├── filter.go
│ │ │ │ ├── time_linux.go
│ │ │ │ ├── time_unsupported.go
│ │ │ │ ├── whiteouts.go
│ │ │ │ └── wrap.go
│ │ │ ├── chrootarchive/
│ │ │ │ ├── archive.go
│ │ │ │ ├── archive_darwin.go
│ │ │ │ ├── archive_unix.go
│ │ │ │ ├── archive_windows.go
│ │ │ │ ├── chroot_linux.go
│ │ │ │ ├── chroot_unix.go
│ │ │ │ ├── diff.go
│ │ │ │ ├── diff_darwin.go
│ │ │ │ ├── diff_unix.go
│ │ │ │ ├── diff_windows.go
│ │ │ │ ├── init_unix.go
│ │ │ │ └── jsoniter.go
│ │ │ ├── chunked/
│ │ │ │ ├── bloom_filter_linux.go
│ │ │ │ ├── cache_linux.go
│ │ │ │ ├── compression.go
│ │ │ │ ├── compression_linux.go
│ │ │ │ ├── compressor/
│ │ │ │ │ ├── compressor.go
│ │ │ │ │ └── rollsum.go
│ │ │ │ ├── dump/
│ │ │ │ │ └── dump.go
│ │ │ │ ├── filesystem_linux.go
│ │ │ │ ├── internal/
│ │ │ │ │ ├── minimal/
│ │ │ │ │ │ └── compression.go
│ │ │ │ │ └── path/
│ │ │ │ │ └── path.go
│ │ │ │ ├── storage.go
│ │ │ │ ├── storage_linux.go
│ │ │ │ ├── storage_unsupported.go
│ │ │ │ └── toc/
│ │ │ │ └── toc.go
│ │ │ ├── config/
│ │ │ │ └── config.go
│ │ │ ├── directory/
│ │ │ │ ├── directory.go
│ │ │ │ ├── directory_unix.go
│ │ │ │ └── directory_windows.go
│ │ │ ├── fileutils/
│ │ │ │ ├── exists_freebsd.go
│ │ │ │ ├── exists_unix.go
│ │ │ │ ├── exists_windows.go
│ │ │ │ ├── fileutils.go
│ │ │ │ ├── fileutils_darwin.go
│ │ │ │ ├── fileutils_solaris.go
│ │ │ │ ├── fileutils_unix.go
│ │ │ │ ├── fileutils_windows.go
│ │ │ │ ├── reflink_linux.go
│ │ │ │ └── reflink_unsupported.go
│ │ │ ├── fsutils/
│ │ │ │ └── fsutils_linux.go
│ │ │ ├── fsverity/
│ │ │ │ ├── fsverity_linux.go
│ │ │ │ └── fsverity_unsupported.go
│ │ │ ├── homedir/
│ │ │ │ ├── homedir.go
│ │ │ │ ├── homedir_unix.go
│ │ │ │ └── homedir_windows.go
│ │ │ ├── idmap/
│ │ │ │ ├── idmapped_utils.go
│ │ │ │ └── idmapped_utils_unsupported.go
│ │ │ ├── idtools/
│ │ │ │ ├── idtools.go
│ │ │ │ ├── idtools_supported.go
│ │ │ │ ├── idtools_unix.go
│ │ │ │ ├── idtools_unsupported.go
│ │ │ │ ├── idtools_windows.go
│ │ │ │ ├── parser.go
│ │ │ │ ├── usergroupadd_linux.go
│ │ │ │ ├── usergroupadd_unsupported.go
│ │ │ │ └── utils_unix.go
│ │ │ ├── ioutils/
│ │ │ │ ├── buffer.go
│ │ │ │ ├── bytespipe.go
│ │ │ │ ├── fswriters.go
│ │ │ │ ├── fswriters_linux.go
│ │ │ │ ├── fswriters_other.go
│ │ │ │ ├── readers.go
│ │ │ │ ├── temp_unix.go
│ │ │ │ ├── temp_windows.go
│ │ │ │ ├── writeflusher.go
│ │ │ │ └── writers.go
│ │ │ ├── lockfile/
│ │ │ │ ├── lastwrite.go
│ │ │ │ ├── lockfile.go
│ │ │ │ ├── lockfile_unix.go
│ │ │ │ └── lockfile_windows.go
│ │ │ ├── longpath/
│ │ │ │ └── longpath.go
│ │ │ ├── loopback/
│ │ │ │ ├── attach_loopback.go
│ │ │ │ ├── ioctl.go
│ │ │ │ ├── loop_wrapper.go
│ │ │ │ ├── loopback.go
│ │ │ │ └── loopback_unsupported.go
│ │ │ ├── mount/
│ │ │ │ ├── flags.go
│ │ │ │ ├── flags_freebsd.go
│ │ │ │ ├── flags_linux.go
│ │ │ │ ├── flags_unsupported.go
│ │ │ │ ├── mount.go
│ │ │ │ ├── mounter_freebsd.go
│ │ │ │ ├── mounter_linux.go
│ │ │ │ ├── mounter_unsupported.go
│ │ │ │ ├── mountinfo.go
│ │ │ │ ├── mountinfo_linux.go
│ │ │ │ ├── sharedsubtree_linux.go
│ │ │ │ ├── unmount_unix.go
│ │ │ │ └── unmount_unsupported.go
│ │ │ ├── parsers/
│ │ │ │ └── parsers.go
│ │ │ ├── pools/
│ │ │ │ └── pools.go
│ │ │ ├── promise/
│ │ │ │ └── promise.go
│ │ │ ├── reexec/
│ │ │ │ ├── README.md
│ │ │ │ ├── command_freebsd.go
│ │ │ │ ├── command_linux.go
│ │ │ │ ├── command_unix.go
│ │ │ │ ├── command_unsupported.go
│ │ │ │ ├── command_windows.go
│ │ │ │ └── reexec.go
│ │ │ ├── regexp/
│ │ │ │ ├── regexp.go
│ │ │ │ ├── regexp_dontprecompile.go
│ │ │ │ └── regexp_precompile.go
│ │ │ ├── stringid/
│ │ │ │ ├── README.md
│ │ │ │ └── stringid.go
│ │ │ ├── stringutils/
│ │ │ │ ├── README.md
│ │ │ │ └── stringutils.go
│ │ │ ├── system/
│ │ │ │ ├── chmod.go
│ │ │ │ ├── chtimes.go
│ │ │ │ ├── chtimes_unix.go
│ │ │ │ ├── chtimes_windows.go
│ │ │ │ ├── errors.go
│ │ │ │ ├── exitcode.go
│ │ │ │ ├── extattr_freebsd.go
│ │ │ │ ├── extattr_unsupported.go
│ │ │ │ ├── init.go
│ │ │ │ ├── init_windows.go
│ │ │ │ ├── lchflags_bsd.go
│ │ │ │ ├── lchown.go
│ │ │ │ ├── lcow_unix.go
│ │ │ │ ├── lcow_windows.go
│ │ │ │ ├── lstat_unix.go
│ │ │ │ ├── lstat_windows.go
│ │ │ │ ├── meminfo.go
│ │ │ │ ├── meminfo_freebsd.go
│ │ │ │ ├── meminfo_linux.go
│ │ │ │ ├── meminfo_solaris.go
│ │ │ │ ├── meminfo_unsupported.go
│ │ │ │ ├── meminfo_windows.go
│ │ │ │ ├── mknod.go
│ │ │ │ ├── mknod_freebsd.go
│ │ │ │ ├── mknod_windows.go
│ │ │ │ ├── path.go
│ │ │ │ ├── path_unix.go
│ │ │ │ ├── path_windows.go
│ │ │ │ ├── process_unix.go
│ │ │ │ ├── rm.go
│ │ │ │ ├── rm_common.go
│ │ │ │ ├── rm_freebsd.go
│ │ │ │ ├── stat_common.go
│ │ │ │ ├── stat_darwin.go
│ │ │ │ ├── stat_freebsd.go
│ │ │ │ ├── stat_linux.go
│ │ │ │ ├── stat_netbsd.go
│ │ │ │ ├── stat_openbsd.go
│ │ │ │ ├── stat_solaris.go
│ │ │ │ ├── stat_unix.go
│ │ │ │ ├── stat_windows.go
│ │ │ │ ├── syscall_unix.go
│ │ │ │ ├── syscall_windows.go
│ │ │ │ ├── umask.go
│ │ │ │ ├── umask_windows.go
│ │ │ │ ├── utimes_freebsd.go
│ │ │ │ ├── utimes_linux.go
│ │ │ │ ├── utimes_unsupported.go
│ │ │ │ ├── xattrs_darwin.go
│ │ │ │ ├── xattrs_freebsd.go
│ │ │ │ ├── xattrs_linux.go
│ │ │ │ └── xattrs_unsupported.go
│ │ │ ├── tarlog/
│ │ │ │ └── tarlogger.go
│ │ │ ├── truncindex/
│ │ │ │ └── truncindex.go
│ │ │ └── unshare/
│ │ │ ├── getenv_linux_cgo.go
│ │ │ ├── getenv_linux_nocgo.go
│ │ │ ├── unshare.c
│ │ │ ├── unshare.go
│ │ │ ├── unshare_cgo.go
│ │ │ ├── unshare_darwin.go
│ │ │ ├── unshare_freebsd.c
│ │ │ ├── unshare_freebsd.go
│ │ │ ├── unshare_gccgo.go
│ │ │ ├── unshare_linux.go
│ │ │ ├── unshare_unsupported.go
│ │ │ └── unshare_unsupported_cgo.go
│ │ ├── storage.conf
│ │ ├── storage.conf-freebsd
│ │ ├── store.go
│ │ ├── types/
│ │ │ ├── default_override_test.conf
│ │ │ ├── errors.go
│ │ │ ├── idmappings.go
│ │ │ ├── options.go
│ │ │ ├── options_bsd.go
│ │ │ ├── options_darwin.go
│ │ │ ├── options_linux.go
│ │ │ ├── options_windows.go
│ │ │ ├── storage_broken.conf
│ │ │ ├── storage_test.conf
│ │ │ └── utils.go
│ │ ├── userns.go
│ │ ├── userns_unsupported.go
│ │ └── utils.go
│ ├── golang.org/
│ │ └── x/
│ │ ├── crypto/
│ │ │ ├── LICENSE
│ │ │ ├── PATENTS
│ │ │ ├── cast5/
│ │ │ │ └── cast5.go
│ │ │ ├── cryptobyte/
│ │ │ │ ├── asn1/
│ │ │ │ │ └── asn1.go
│ │ │ │ ├── asn1.go
│ │ │ │ ├── builder.go
│ │ │ │ └── string.go
│ │ │ ├── internal/
│ │ │ │ ├── alias/
│ │ │ │ │ ├── alias.go
│ │ │ │ │ └── alias_purego.go
│ │ │ │ └── poly1305/
│ │ │ │ ├── mac_noasm.go
│ │ │ │ ├── poly1305.go
│ │ │ │ ├── sum_amd64.s
│ │ │ │ ├── sum_asm.go
│ │ │ │ ├── sum_generic.go
│ │ │ │ ├── sum_loong64.s
│ │ │ │ ├── sum_ppc64x.s
│ │ │ │ ├── sum_s390x.go
│ │ │ │ └── sum_s390x.s
│ │ │ ├── nacl/
│ │ │ │ └── secretbox/
│ │ │ │ └── secretbox.go
│ │ │ ├── openpgp/
│ │ │ │ ├── armor/
│ │ │ │ │ ├── armor.go
│ │ │ │ │ └── encode.go
│ │ │ │ ├── canonical_text.go
│ │ │ │ ├── elgamal/
│ │ │ │ │ └── elgamal.go
│ │ │ │ ├── errors/
│ │ │ │ │ └── errors.go
│ │ │ │ ├── keys.go
│ │ │ │ ├── packet/
│ │ │ │ │ ├── compressed.go
│ │ │ │ │ ├── config.go
│ │ │ │ │ ├── encrypted_key.go
│ │ │ │ │ ├── literal.go
│ │ │ │ │ ├── ocfb.go
│ │ │ │ │ ├── one_pass_signature.go
│ │ │ │ │ ├── opaque.go
│ │ │ │ │ ├── packet.go
│ │ │ │ │ ├── private_key.go
│ │ │ │ │ ├── public_key.go
│ │ │ │ │ ├── public_key_v3.go
│ │ │ │ │ ├── reader.go
│ │ │ │ │ ├── signature.go
│ │ │ │ │ ├── signature_v3.go
│ │ │ │ │ ├── symmetric_key_encrypted.go
│ │ │ │ │ ├── symmetrically_encrypted.go
│ │ │ │ │ ├── userattribute.go
│ │ │ │ │ └── userid.go
│ │ │ │ ├── read.go
│ │ │ │ ├── s2k/
│ │ │ │ │ └── s2k.go
│ │ │ │ └── write.go
│ │ │ ├── pbkdf2/
│ │ │ │ └── pbkdf2.go
│ │ │ ├── salsa20/
│ │ │ │ └── salsa/
│ │ │ │ ├── hsalsa20.go
│ │ │ │ ├── salsa208.go
│ │ │ │ ├── salsa20_amd64.go
│ │ │ │ ├── salsa20_amd64.s
│ │ │ │ ├── salsa20_noasm.go
│ │ │ │ └── salsa20_ref.go
│ │ │ └── scrypt/
│ │ │ └── scrypt.go
│ │ ├── net/
│ │ │ ├── LICENSE
│ │ │ ├── PATENTS
│ │ │ ├── http/
│ │ │ │ └── httpguts/
│ │ │ │ ├── guts.go
│ │ │ │ └── httplex.go
│ │ │ ├── http2/
│ │ │ │ ├── .gitignore
│ │ │ │ ├── ascii.go
│ │ │ │ ├── ciphers.go
│ │ │ │ ├── client_conn_pool.go
│ │ │ │ ├── client_priority_go126.go
│ │ │ │ ├── client_priority_go127.go
│ │ │ │ ├── config.go
│ │ │ │ ├── config_go125.go
│ │ │ │ ├── config_go126.go
│ │ │ │ ├── databuffer.go
│ │ │ │ ├── errors.go
│ │ │ │ ├── flow.go
│ │ │ │ ├── frame.go
│ │ │ │ ├── gotrack.go
│ │ │ │ ├── hpack/
│ │ │ │ │ ├── encode.go
│ │ │ │ │ ├── hpack.go
│ │ │ │ │ ├── huffman.go
│ │ │ │ │ ├── static_table.go
│ │ │ │ │ └── tables.go
│ │ │ │ ├── http2.go
│ │ │ │ ├── pipe.go
│ │ │ │ ├── server.go
│ │ │ │ ├── transport.go
│ │ │ │ ├── unencrypted.go
│ │ │ │ ├── write.go
│ │ │ │ ├── writesched.go
│ │ │ │ ├── writesched_priority_rfc7540.go
│ │ │ │ ├── writesched_priority_rfc9218.go
│ │ │ │ ├── writesched_random.go
│ │ │ │ └── writesched_roundrobin.go
│ │ │ ├── idna/
│ │ │ │ ├── go118.go
│ │ │ │ ├── idna10.0.0.go
│ │ │ │ ├── idna9.0.0.go
│ │ │ │ ├── pre_go118.go
│ │ │ │ ├── punycode.go
│ │ │ │ ├── tables10.0.0.go
│ │ │ │ ├── tables11.0.0.go
│ │ │ │ ├── tables12.0.0.go
│ │ │ │ ├── tables13.0.0.go
│ │ │ │ ├── tables15.0.0.go
│ │ │ │ ├── tables9.0.0.go
│ │ │ │ ├── trie.go
│ │ │ │ ├── trie12.0.0.go
│ │ │ │ ├── trie13.0.0.go
│ │ │ │ └── trieval.go
│ │ │ ├── internal/
│ │ │ │ ├── httpcommon/
│ │ │ │ │ ├── ascii.go
│ │ │ │ │ ├── headermap.go
│ │ │ │ │ └── request.go
│ │ │ │ ├── httpsfv/
│ │ │ │ │ └── httpsfv.go
│ │ │ │ └── timeseries/
│ │ │ │ └── timeseries.go
│ │ │ └── trace/
│ │ │ ├── events.go
│ │ │ ├── histogram.go
│ │ │ └── trace.go
│ │ ├── oauth2/
│ │ │ ├── .travis.yml
│ │ │ ├── CONTRIBUTING.md
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── deviceauth.go
│ │ │ ├── internal/
│ │ │ │ ├── doc.go
│ │ │ │ ├── oauth2.go
│ │ │ │ ├── token.go
│ │ │ │ └── transport.go
│ │ │ ├── oauth2.go
│ │ │ ├── pkce.go
│ │ │ ├── token.go
│ │ │ └── transport.go
│ │ ├── sync/
│ │ │ ├── LICENSE
│ │ │ ├── PATENTS
│ │ │ ├── errgroup/
│ │ │ │ └── errgroup.go
│ │ │ └── semaphore/
│ │ │ └── semaphore.go
│ │ ├── sys/
│ │ │ ├── LICENSE
│ │ │ ├── PATENTS
│ │ │ ├── cpu/
│ │ │ │ ├── asm_aix_ppc64.s
│ │ │ │ ├── asm_darwin_arm64_gc.s
│ │ │ │ ├── asm_darwin_x86_gc.s
│ │ │ │ ├── byteorder.go
│ │ │ │ ├── cpu.go
│ │ │ │ ├── cpu_aix.go
│ │ │ │ ├── cpu_arm.go
│ │ │ │ ├── cpu_arm64.go
│ │ │ │ ├── cpu_arm64.s
│ │ │ │ ├── cpu_darwin_arm64.go
│ │ │ │ ├── cpu_darwin_arm64_other.go
│ │ │ │ ├── cpu_darwin_x86.go
│ │ │ │ ├── cpu_gc_arm64.go
│ │ │ │ ├── cpu_gc_s390x.go
│ │ │ │ ├── cpu_gc_x86.go
│ │ │ │ ├── cpu_gc_x86.s
│ │ │ │ ├── cpu_gccgo_arm64.go
│ │ │ │ ├── cpu_gccgo_s390x.go
│ │ │ │ ├── cpu_gccgo_x86.c
│ │ │ │ ├── cpu_gccgo_x86.go
│ │ │ │ ├── cpu_linux.go
│ │ │ │ ├── cpu_linux_arm.go
│ │ │ │ ├── cpu_linux_arm64.go
│ │ │ │ ├── cpu_linux_loong64.go
│ │ │ │ ├── cpu_linux_mips64x.go
│ │ │ │ ├── cpu_linux_noinit.go
│ │ │ │ ├── cpu_linux_ppc64x.go
│ │ │ │ ├── cpu_linux_riscv64.go
│ │ │ │ ├── cpu_linux_s390x.go
│ │ │ │ ├── cpu_loong64.go
│ │ │ │ ├── cpu_loong64.s
│ │ │ │ ├── cpu_mips64x.go
│ │ │ │ ├── cpu_mipsx.go
│ │ │ │ ├── cpu_netbsd_arm64.go
│ │ │ │ ├── cpu_openbsd_arm64.go
│ │ │ │ ├── cpu_openbsd_arm64.s
│ │ │ │ ├── cpu_other_arm.go
│ │ │ │ ├── cpu_other_arm64.go
│ │ │ │ ├── cpu_other_mips64x.go
│ │ │ │ ├── cpu_other_ppc64x.go
│ │ │ │ ├── cpu_other_riscv64.go
│ │ │ │ ├── cpu_other_x86.go
│ │ │ │ ├── cpu_ppc64x.go
│ │ │ │ ├── cpu_riscv64.go
│ │ │ │ ├── cpu_s390x.go
│ │ │ │ ├── cpu_s390x.s
│ │ │ │ ├── cpu_wasm.go
│ │ │ │ ├── cpu_windows_arm64.go
│ │ │ │ ├── cpu_x86.go
│ │ │ │ ├── cpu_zos.go
│ │ │ │ ├── cpu_zos_s390x.go
│ │ │ │ ├── endian_big.go
│ │ │ │ ├── endian_little.go
│ │ │ │ ├── hwcap_linux.go
│ │ │ │ ├── parse.go
│ │ │ │ ├── proc_cpuinfo_linux.go
│ │ │ │ ├── runtime_auxv.go
│ │ │ │ ├── runtime_auxv_go121.go
│ │ │ │ ├── syscall_aix_gccgo.go
│ │ │ │ ├── syscall_aix_ppc64_gc.go
│ │ │ │ ├── syscall_darwin_arm64_gc.go
│ │ │ │ └── syscall_darwin_x86_gc.go
│ │ │ ├── plan9/
│ │ │ │ ├── asm.s
│ │ │ │ ├── asm_plan9_386.s
│ │ │ │ ├── asm_plan9_amd64.s
│ │ │ │ ├── asm_plan9_arm.s
│ │ │ │ ├── const_plan9.go
│ │ │ │ ├── dir_plan9.go
│ │ │ │ ├── env_plan9.go
│ │ │ │ ├── errors_plan9.go
│ │ │ │ ├── mkall.sh
│ │ │ │ ├── mkerrors.sh
│ │ │ │ ├── mksysnum_plan9.sh
│ │ │ │ ├── pwd_plan9.go
│ │ │ │ ├── race.go
│ │ │ │ ├── race0.go
│ │ │ │ ├── str.go
│ │ │ │ ├── syscall.go
│ │ │ │ ├── syscall_plan9.go
│ │ │ │ ├── zsyscall_plan9_386.go
│ │ │ │ ├── zsyscall_plan9_amd64.go
│ │ │ │ ├── zsyscall_plan9_arm.go
│ │ │ │ └── zsysnum_plan9.go
│ │ │ ├── unix/
│ │ │ │ ├── .gitignore
│ │ │ │ ├── README.md
│ │ │ │ ├── affinity_linux.go
│ │ │ │ ├── aliases.go
│ │ │ │ ├── asm_aix_ppc64.s
│ │ │ │ ├── asm_bsd_386.s
│ │ │ │ ├── asm_bsd_amd64.s
│ │ │ │ ├── asm_bsd_arm.s
│ │ │ │ ├── asm_bsd_arm64.s
│ │ │ │ ├── asm_bsd_ppc64.s
│ │ │ │ ├── asm_bsd_riscv64.s
│ │ │ │ ├── asm_linux_386.s
│ │ │ │ ├── asm_linux_amd64.s
│ │ │ │ ├── asm_linux_arm.s
│ │ │ │ ├── asm_linux_arm64.s
│ │ │ │ ├── asm_linux_loong64.s
│ │ │ │ ├── asm_linux_mips64x.s
│ │ │ │ ├── asm_linux_mipsx.s
│ │ │ │ ├── asm_linux_ppc64x.s
│ │ │ │ ├── asm_linux_riscv64.s
│ │ │ │ ├── asm_linux_s390x.s
│ │ │ │ ├── asm_openbsd_mips64.s
│ │ │ │ ├── asm_solaris_amd64.s
│ │ │ │ ├── asm_zos_s390x.s
│ │ │ │ ├── auxv.go
│ │ │ │ ├── auxv_unsupported.go
│ │ │ │ ├── bluetooth_linux.go
│ │ │ │ ├── bpxsvc_zos.go
│ │ │ │ ├── bpxsvc_zos.s
│ │ │ │ ├── cap_freebsd.go
│ │ │ │ ├── constants.go
│ │ │ │ ├── dev_aix_ppc.go
│ │ │ │ ├── dev_aix_ppc64.go
│ │ │ │ ├── dev_darwin.go
│ │ │ │ ├── dev_dragonfly.go
│ │ │ │ ├── dev_freebsd.go
│ │ │ │ ├── dev_linux.go
│ │ │ │ ├── dev_netbsd.go
│ │ │ │ ├── dev_openbsd.go
│ │ │ │ ├── dev_zos.go
│ │ │ │ ├── dirent.go
│ │ │ │ ├── endian_big.go
│ │ │ │ ├── endian_little.go
│ │ │ │ ├── env_unix.go
│ │ │ │ ├── fcntl.go
│ │ │ │ ├── fcntl_darwin.go
│ │ │ │ ├── fcntl_linux_32bit.go
│ │ │ │ ├── fdset.go
│ │ │ │ ├── gccgo.go
│ │ │ │ ├── gccgo_c.c
│ │ │ │ ├── gccgo_linux_amd64.go
│ │ │ │ ├── ifreq_linux.go
│ │ │ │ ├── ioctl_linux.go
│ │ │ │ ├── ioctl_signed.go
│ │ │ │ ├── ioctl_unsigned.go
│ │ │ │ ├── ioctl_zos.go
│ │ │ │ ├── mkall.sh
│ │ │ │ ├── mkerrors.sh
│ │ │ │ ├── mmap_nomremap.go
│ │ │ │ ├── mremap.go
│ │ │ │ ├── pagesize_unix.go
│ │ │ │ ├── pledge_openbsd.go
│ │ │ │ ├── ptrace_darwin.go
│ │ │ │ ├── ptrace_ios.go
│ │ │ │ ├── race.go
│ │ │ │ ├── race0.go
│ │ │ │ ├── readdirent_getdents.go
│ │ │ │ ├── readdirent_getdirentries.go
│ │ │ │ ├── sockcmsg_dragonfly.go
│ │ │ │ ├── sockcmsg_linux.go
│ │ │ │ ├── sockcmsg_unix.go
│ │ │ │ ├── sockcmsg_unix_other.go
│ │ │ │ ├── sockcmsg_zos.go
│ │ │ │ ├── symaddr_zos_s390x.s
│ │ │ │ ├── syscall.go
│ │ │ │ ├── syscall_aix.go
│ │ │ │ ├── syscall_aix_ppc.go
│ │ │ │ ├── syscall_aix_ppc64.go
│ │ │ │ ├── syscall_bsd.go
│ │ │ │ ├── syscall_darwin.go
│ │ │ │ ├── syscall_darwin_amd64.go
│ │ │ │ ├── syscall_darwin_arm64.go
│ │ │ │ ├── syscall_darwin_libSystem.go
│ │ │ │ ├── syscall_dragonfly.go
│ │ │ │ ├── syscall_dragonfly_amd64.go
│ │ │ │ ├── syscall_freebsd.go
│ │ │ │ ├── syscall_freebsd_386.go
│ │ │ │ ├── syscall_freebsd_amd64.go
│ │ │ │ ├── syscall_freebsd_arm.go
│ │ │ │ ├── syscall_freebsd_arm64.go
│ │ │ │ ├── syscall_freebsd_riscv64.go
│ │ │ │ ├── syscall_hurd.go
│ │ │ │ ├── syscall_hurd_386.go
│ │ │ │ ├── syscall_illumos.go
│ │ │ │ ├── syscall_linux.go
│ │ │ │ ├── syscall_linux_386.go
│ │ │ │ ├── syscall_linux_alarm.go
│ │ │ │ ├── syscall_linux_amd64.go
│ │ │ │ ├── syscall_linux_amd64_gc.go
│ │ │ │ ├── syscall_linux_arm.go
│ │ │ │ ├── syscall_linux_arm64.go
│ │ │ │ ├── syscall_linux_gc.go
│ │ │ │ ├── syscall_linux_gc_386.go
│ │ │ │ ├── syscall_linux_gc_arm.go
│ │ │ │ ├── syscall_linux_gccgo_386.go
│ │ │ │ ├── syscall_linux_gccgo_arm.go
│ │ │ │ ├── syscall_linux_loong64.go
│ │ │ │ ├── syscall_linux_mips64x.go
│ │ │ │ ├── syscall_linux_mipsx.go
│ │ │ │ ├── syscall_linux_ppc.go
│ │ │ │ ├── syscall_linux_ppc64x.go
│ │ │ │ ├── syscall_linux_riscv64.go
│ │ │ │ ├── syscall_linux_s390x.go
│ │ │ │ ├── syscall_linux_sparc64.go
│ │ │ │ ├── syscall_netbsd.go
│ │ │ │ ├── syscall_netbsd_386.go
│ │ │ │ ├── syscall_netbsd_amd64.go
│ │ │ │ ├── syscall_netbsd_arm.go
│ │ │ │ ├── syscall_netbsd_arm64.go
│ │ │ │ ├── syscall_openbsd.go
│ │ │ │ ├── syscall_openbsd_386.go
│ │ │ │ ├── syscall_openbsd_amd64.go
│ │ │ │ ├── syscall_openbsd_arm.go
│ │ │ │ ├── syscall_openbsd_arm64.go
│ │ │ │ ├── syscall_openbsd_libc.go
│ │ │ │ ├── syscall_openbsd_mips64.go
│ │ │ │ ├── syscall_openbsd_ppc64.go
│ │ │ │ ├── syscall_openbsd_riscv64.go
│ │ │ │ ├── syscall_solaris.go
│ │ │ │ ├── syscall_solaris_amd64.go
│ │ │ │ ├── syscall_unix.go
│ │ │ │ ├── syscall_unix_gc.go
│ │ │ │ ├── syscall_unix_gc_ppc64x.go
│ │ │ │ ├── syscall_zos_s390x.go
│ │ │ │ ├── sysvshm_linux.go
│ │ │ │ ├── sysvshm_unix.go
│ │ │ │ ├── sysvshm_unix_other.go
│ │ │ │ ├── timestruct.go
│ │ │ │ ├── unveil_openbsd.go
│ │ │ │ ├── vgetrandom_linux.go
│ │ │ │ ├── vgetrandom_unsupported.go
│ │ │ │ ├── xattr_bsd.go
│ │ │ │ ├── zerrors_aix_ppc.go
│ │ │ │ ├── zerrors_aix_ppc64.go
│ │ │ │ ├── zerrors_darwin_amd64.go
│ │ │ │ ├── zerrors_darwin_arm64.go
│ │ │ │ ├── zerrors_dragonfly_amd64.go
│ │ │ │ ├── zerrors_freebsd_386.go
│ │ │ │ ├── zerrors_freebsd_amd64.go
│ │ │ │ ├── zerrors_freebsd_arm.go
│ │ │ │ ├── zerrors_freebsd_arm64.go
│ │ │ │ ├── zerrors_freebsd_riscv64.go
│ │ │ │ ├── zerrors_linux.go
│ │ │ │ ├── zerrors_linux_386.go
│ │ │ │ ├── zerrors_linux_amd64.go
│ │ │ │ ├── zerrors_linux_arm.go
│ │ │ │ ├── zerrors_linux_arm64.go
│ │ │ │ ├── zerrors_linux_loong64.go
│ │ │ │ ├── zerrors_linux_mips.go
│ │ │ │ ├── zerrors_linux_mips64.go
│ │ │ │ ├── zerrors_linux_mips64le.go
│ │ │ │ ├── zerrors_linux_mipsle.go
│ │ │ │ ├── zerrors_linux_ppc.go
│ │ │ │ ├── zerrors_linux_ppc64.go
│ │ │ │ ├── zerrors_linux_ppc64le.go
│ │ │ │ ├── zerrors_linux_riscv64.go
│ │ │ │ ├── zerrors_linux_s390x.go
│ │ │ │ ├── zerrors_linux_sparc64.go
│ │ │ │ ├── zerrors_netbsd_386.go
│ │ │ │ ├── zerrors_netbsd_amd64.go
│ │ │ │ ├── zerrors_netbsd_arm.go
│ │ │ │ ├── zerrors_netbsd_arm64.go
│ │ │ │ ├── zerrors_openbsd_386.go
│ │ │ │ ├── zerrors_openbsd_amd64.go
│ │ │ │ ├── zerrors_openbsd_arm.go
│ │ │ │ ├── zerrors_openbsd_arm64.go
│ │ │ │ ├── zerrors_openbsd_mips64.go
│ │ │ │ ├── zerrors_openbsd_ppc64.go
│ │ │ │ ├── zerrors_openbsd_riscv64.go
│ │ │ │ ├── zerrors_solaris_amd64.go
│ │ │ │ ├── zerrors_zos_s390x.go
│ │ │ │ ├── zptrace_armnn_linux.go
│ │ │ │ ├── zptrace_linux_arm64.go
│ │ │ │ ├── zptrace_mipsnn_linux.go
│ │ │ │ ├── zptrace_mipsnnle_linux.go
│ │ │ │ ├── zptrace_x86_linux.go
│ │ │ │ ├── zsymaddr_zos_s390x.s
│ │ │ │ ├── zsyscall_aix_ppc.go
│ │ │ │ ├── zsyscall_aix_ppc64.go
│ │ │ │ ├── zsyscall_aix_ppc64_gc.go
│ │ │ │ ├── zsyscall_aix_ppc64_gccgo.go
│ │ │ │ ├── zsyscall_darwin_amd64.go
│ │ │ │ ├── zsyscall_darwin_amd64.s
│ │ │ │ ├── zsyscall_darwin_arm64.go
│ │ │ │ ├── zsyscall_darwin_arm64.s
│ │ │ │ ├── zsyscall_dragonfly_amd64.go
│ │ │ │ ├── zsyscall_freebsd_386.go
│ │ │ │ ├── zsyscall_freebsd_amd64.go
│ │ │ │ ├── zsyscall_freebsd_arm.go
│ │ │ │ ├── zsyscall_freebsd_arm64.go
│ │ │ │ ├── zsyscall_freebsd_riscv64.go
│ │ │ │ ├── zsyscall_illumos_amd64.go
│ │ │ │ ├── zsyscall_linux.go
│ │ │ │ ├── zsyscall_linux_386.go
│ │ │ │ ├── zsyscall_linux_amd64.go
│ │ │ │ ├── zsyscall_linux_arm.go
│ │ │ │ ├── zsyscall_linux_arm64.go
│ │ │ │ ├── zsyscall_linux_loong64.go
│ │ │ │ ├── zsyscall_linux_mips.go
│ │ │ │ ├── zsyscall_linux_mips64.go
│ │ │ │ ├── zsyscall_linux_mips64le.go
│ │ │ │ ├── zsyscall_linux_mipsle.go
│ │ │ │ ├── zsyscall_linux_ppc.go
│ │ │ │ ├── zsyscall_linux_ppc64.go
│ │ │ │ ├── zsyscall_linux_ppc64le.go
│ │ │ │ ├── zsyscall_linux_riscv64.go
│ │ │ │ ├── zsyscall_linux_s390x.go
│ │ │ │ ├── zsyscall_linux_sparc64.go
│ │ │ │ ├── zsyscall_netbsd_386.go
│ │ │ │ ├── zsyscall_netbsd_amd64.go
│ │ │ │ ├── zsyscall_netbsd_arm.go
│ │ │ │ ├── zsyscall_netbsd_arm64.go
│ │ │ │ ├── zsyscall_openbsd_386.go
│ │ │ │ ├── zsyscall_openbsd_386.s
│ │ │ │ ├── zsyscall_openbsd_amd64.go
│ │ │ │ ├── zsyscall_openbsd_amd64.s
│ │ │ │ ├── zsyscall_openbsd_arm.go
│ │ │ │ ├── zsyscall_openbsd_arm.s
│ │ │ │ ├── zsyscall_openbsd_arm64.go
│ │ │ │ ├── zsyscall_openbsd_arm64.s
│ │ │ │ ├── zsyscall_openbsd_mips64.go
│ │ │ │ ├── zsyscall_openbsd_mips64.s
│ │ │ │ ├── zsyscall_openbsd_ppc64.go
│ │ │ │ ├── zsyscall_openbsd_ppc64.s
│ │ │ │ ├── zsyscall_openbsd_riscv64.go
│ │ │ │ ├── zsyscall_openbsd_riscv64.s
│ │ │ │ ├── zsyscall_solaris_amd64.go
│ │ │ │ ├── zsyscall_zos_s390x.go
│ │ │ │ ├── zsysctl_openbsd_386.go
│ │ │ │ ├── zsysctl_openbsd_amd64.go
│ │ │ │ ├── zsysctl_openbsd_arm.go
│ │ │ │ ├── zsysctl_openbsd_arm64.go
│ │ │ │ ├── zsysctl_openbsd_mips64.go
│ │ │ │ ├── zsysctl_openbsd_ppc64.go
│ │ │ │ ├── zsysctl_openbsd_riscv64.go
│ │ │ │ ├── zsysnum_darwin_amd64.go
│ │ │ │ ├── zsysnum_darwin_arm64.go
│ │ │ │ ├── zsysnum_dragonfly_amd64.go
│ │ │ │ ├── zsysnum_freebsd_386.go
│ │ │ │ ├── zsysnum_freebsd_amd64.go
│ │ │ │ ├── zsysnum_freebsd_arm.go
│ │ │ │ ├── zsysnum_freebsd_arm64.go
│ │ │ │ ├── zsysnum_freebsd_riscv64.go
│ │ │ │ ├── zsysnum_linux_386.go
│ │ │ │ ├── zsysnum_linux_amd64.go
│ │ │ │ ├── zsysnum_linux_arm.go
│ │ │ │ ├── zsysnum_linux_arm64.go
│ │ │ │ ├── zsysnum_linux_loong64.go
│ │ │ │ ├── zsysnum_linux_mips.go
│ │ │ │ ├── zsysnum_linux_mips64.go
│ │ │ │ ├── zsysnum_linux_mips64le.go
│ │ │ │ ├── zsysnum_linux_mipsle.go
│ │ │ │ ├── zsysnum_linux_ppc.go
│ │ │ │ ├── zsysnum_linux_ppc64.go
│ │ │ │ ├── zsysnum_linux_ppc64le.go
│ │ │ │ ├── zsysnum_linux_riscv64.go
│ │ │ │ ├── zsysnum_linux_s390x.go
│ │ │ │ ├── zsysnum_linux_sparc64.go
│ │ │ │ ├── zsysnum_netbsd_386.go
│ │ │ │ ├── zsysnum_netbsd_amd64.go
│ │ │ │ ├── zsysnum_netbsd_arm.go
│ │ │ │ ├── zsysnum_netbsd_arm64.go
│ │ │ │ ├── zsysnum_openbsd_386.go
│ │ │ │ ├── zsysnum_openbsd_amd64.go
│ │ │ │ ├── zsysnum_openbsd_arm.go
│ │ │ │ ├── zsysnum_openbsd_arm64.go
│ │ │ │ ├── zsysnum_openbsd_mips64.go
│ │ │ │ ├── zsysnum_openbsd_ppc64.go
│ │ │ │ ├── zsysnum_openbsd_riscv64.go
│ │ │ │ ├── zsysnum_zos_s390x.go
│ │ │ │ ├── ztypes_aix_ppc.go
│ │ │ │ ├── ztypes_aix_ppc64.go
│ │ │ │ ├── ztypes_darwin_amd64.go
│ │ │ │ ├── ztypes_darwin_arm64.go
│ │ │ │ ├── ztypes_dragonfly_amd64.go
│ │ │ │ ├── ztypes_freebsd_386.go
│ │ │ │ ├── ztypes_freebsd_amd64.go
│ │ │ │ ├── ztypes_freebsd_arm.go
│ │ │ │ ├── ztypes_freebsd_arm64.go
│ │ │ │ ├── ztypes_freebsd_riscv64.go
│ │ │ │ ├── ztypes_linux.go
│ │ │ │ ├── ztypes_linux_386.go
│ │ │ │ ├── ztypes_linux_amd64.go
│ │ │ │ ├── ztypes_linux_arm.go
│ │ │ │ ├── ztypes_linux_arm64.go
│ │ │ │ ├── ztypes_linux_loong64.go
│ │ │ │ ├── ztypes_linux_mips.go
│ │ │ │ ├── ztypes_linux_mips64.go
│ │ │ │ ├── ztypes_linux_mips64le.go
│ │ │ │ ├── ztypes_linux_mipsle.go
│ │ │ │ ├── ztypes_linux_ppc.go
│ │ │ │ ├── ztypes_linux_ppc64.go
│ │ │ │ ├── ztypes_linux_ppc64le.go
│ │ │ │ ├── ztypes_linux_riscv64.go
│ │ │ │ ├── ztypes_linux_s390x.go
│ │ │ │ ├── ztypes_linux_sparc64.go
│ │ │ │ ├── ztypes_netbsd_386.go
│ │ │ │ ├── ztypes_netbsd_amd64.go
│ │ │ │ ├── ztypes_netbsd_arm.go
│ │ │ │ ├── ztypes_netbsd_arm64.go
│ │ │ │ ├── ztypes_openbsd_386.go
│ │ │ │ ├── ztypes_openbsd_amd64.go
│ │ │ │ ├── ztypes_openbsd_arm.go
│ │ │ │ ├── ztypes_openbsd_arm64.go
│ │ │ │ ├── ztypes_openbsd_mips64.go
│ │ │ │ ├── ztypes_openbsd_ppc64.go
│ │ │ │ ├── ztypes_openbsd_riscv64.go
│ │ │ │ ├── ztypes_solaris_amd64.go
│ │ │ │ └── ztypes_zos_s390x.go
│ │ │ └── windows/
│ │ │ ├── aliases.go
│ │ │ ├── dll_windows.go
│ │ │ ├── env_windows.go
│ │ │ ├── eventlog.go
│ │ │ ├── exec_windows.go
│ │ │ ├── memory_windows.go
│ │ │ ├── mkerrors.bash
│ │ │ ├── mkknownfolderids.bash
│ │ │ ├── mksyscall.go
│ │ │ ├── race.go
│ │ │ ├── race0.go
│ │ │ ├── security_windows.go
│ │ │ ├── service.go
│ │ │ ├── setupapi_windows.go
│ │ │ ├── str.go
│ │ │ ├── syscall.go
│ │ │ ├── syscall_windows.go
│ │ │ ├── types_windows.go
│ │ │ ├── types_windows_386.go
│ │ │ ├── types_windows_amd64.go
│ │ │ ├── types_windows_arm.go
│ │ │ ├── types_windows_arm64.go
│ │ │ ├── zerrors_windows.go
│ │ │ ├── zknownfolderids_windows.go
│ │ │ └── zsyscall_windows.go
│ │ ├── term/
│ │ │ ├── CONTRIBUTING.md
│ │ │ ├── LICENSE
│ │ │ ├── PATENTS
│ │ │ ├── README.md
│ │ │ ├── codereview.cfg
│ │ │ ├── term.go
│ │ │ ├── term_plan9.go
│ │ │ ├── term_unix.go
│ │ │ ├── term_unix_bsd.go
│ │ │ ├── term_unix_other.go
│ │ │ ├── term_unsupported.go
│ │ │ ├── term_windows.go
│ │ │ └── terminal.go
│ │ └── text/
│ │ ├── LICENSE
│ │ ├── PATENTS
│ │ ├── feature/
│ │ │ └── plural/
│ │ │ ├── common.go
│ │ │ ├── message.go
│ │ │ ├── plural.go
│ │ │ └── tables.go
│ │ ├── internal/
│ │ │ ├── catmsg/
│ │ │ │ ├── catmsg.go
│ │ │ │ ├── codec.go
│ │ │ │ └── varint.go
│ │ │ ├── format/
│ │ │ │ ├── format.go
│ │ │ │ └── parser.go
│ │ │ ├── internal.go
│ │ │ ├── language/
│ │ │ │ ├── common.go
│ │ │ │ ├── compact/
│ │ │ │ │ ├── compact.go
│ │ │ │ │ ├── language.go
│ │ │ │ │ ├── parents.go
│ │ │ │ │ ├── tables.go
│ │ │ │ │ └── tags.go
│ │ │ │ ├── compact.go
│ │ │ │ ├── compose.go
│ │ │ │ ├── coverage.go
│ │ │ │ ├── language.go
│ │ │ │ ├── lookup.go
│ │ │ │ ├── match.go
│ │ │ │ ├── parse.go
│ │ │ │ ├── tables.go
│ │ │ │ └── tags.go
│ │ │ ├── match.go
│ │ │ ├── number/
│ │ │ │ ├── common.go
│ │ │ │ ├── decimal.go
│ │ │ │ ├── format.go
│ │ │ │ ├── number.go
│ │ │ │ ├── pattern.go
│ │ │ │ ├── roundingmode_string.go
│ │ │ │ └── tables.go
│ │ │ ├── stringset/
│ │ │ │ └── set.go
│ │ │ └── tag/
│ │ │ └── tag.go
│ │ ├── language/
│ │ │ ├── coverage.go
│ │ │ ├── doc.go
│ │ │ ├── language.go
│ │ │ ├── match.go
│ │ │ ├── parse.go
│ │ │ ├── tables.go
│ │ │ └── tags.go
│ │ ├── message/
│ │ │ ├── catalog/
│ │ │ │ ├── catalog.go
│ │ │ │ └── dict.go
│ │ │ ├── catalog.go
│ │ │ ├── doc.go
│ │ │ ├── format.go
│ │ │ ├── message.go
│ │ │ └── print.go
│ │ ├── secure/
│ │ │ └── bidirule/
│ │ │ └── bidirule.go
│ │ ├── transform/
│ │ │ └── transform.go
│ │ └── unicode/
│ │ ├── bidi/
│ │ │ ├── bidi.go
│ │ │ ├── bracket.go
│ │ │ ├── core.go
│ │ │ ├── prop.go
│ │ │ ├── tables15.0.0.go
│ │ │ ├── tables17.0.0.go
│ │ │ └── trieval.go
│ │ └── norm/
│ │ ├── composition.go
│ │ ├── forminfo.go
│ │ ├── input.go
│ │ ├── iter.go
│ │ ├── normalize.go
│ │ ├── readwriter.go
│ │ ├── tables15.0.0.go
│ │ ├── tables17.0.0.go
│ │ ├── transform.go
│ │ └── trie.go
│ ├── google.golang.org/
│ │ ├── genproto/
│ │ │ └── googleapis/
│ │ │ ├── api/
│ │ │ │ ├── LICENSE
│ │ │ │ ├── annotations/
│ │ │ │ │ ├── annotations.pb.go
│ │ │ │ │ ├── client.pb.go
│ │ │ │ │ ├── field_behavior.pb.go
│ │ │ │ │ ├── field_info.pb.go
│ │ │ │ │ ├── http.pb.go
│ │ │ │ │ ├── resource.pb.go
│ │ │ │ │ └── routing.pb.go
│ │ │ │ └── launch_stage.pb.go
│ │ │ └── rpc/
│ │ │ ├── LICENSE
│ │ │ └── status/
│ │ │ └── status.pb.go
│ │ ├── grpc/
│ │ │ ├── AUTHORS
│ │ │ ├── CODE-OF-CONDUCT.md
│ │ │ ├── CONTRIBUTING.md
│ │ │ ├── GOVERNANCE.md
│ │ │ ├── LICENSE
│ │ │ ├── MAINTAINERS.md
│ │ │ ├── Makefile
│ │ │ ├── NOTICE.txt
│ │ │ ├── README.md
│ │ │ ├── SECURITY.md
│ │ │ ├── attributes/
│ │ │ │ └── attributes.go
│ │ │ ├── backoff/
│ │ │ │ └── backoff.go
│ │ │ ├── backoff.go
│ │ │ ├── balancer/
│ │ │ │ ├── balancer.go
│ │ │ │ ├── base/
│ │ │ │ │ ├── balancer.go
│ │ │ │ │ └── base.go
│ │ │ │ ├── conn_state_evaluator.go
│ │ │ │ ├── endpointsharding/
│ │ │ │ │ └── endpointsharding.go
│ │ │ │ ├── grpclb/
│ │ │ │ │ └── state/
│ │ │ │ │ └── state.go
│ │ │ │ ├── pickfirst/
│ │ │ │ │ ├── internal/
│ │ │ │ │ │ └── internal.go
│ │ │ │ │ └── pickfirst.go
│ │ │ │ ├── roundrobin/
│ │ │ │ │ └── roundrobin.go
│ │ │ │ └── subconn.go
│ │ │ ├── balancer_wrapper.go
│ │ │ ├── binarylog/
│ │ │ │ └── grpc_binarylog_v1/
│ │ │ │ └── binarylog.pb.go
│ │ │ ├── call.go
│ │ │ ├── channelz/
│ │ │ │ └── channelz.go
│ │ │ ├── clientconn.go
│ │ │ ├── codec.go
│ │ │ ├── codes/
│ │ │ │ ├── code_string.go
│ │ │ │ └── codes.go
│ │ │ ├── connectivity/
│ │ │ │ └── connectivity.go
│ │ │ ├── credentials/
│ │ │ │ ├── credentials.go
│ │ │ │ ├── insecure/
│ │ │ │ │ └── insecure.go
│ │ │ │ └── tls.go
│ │ │ ├── dialoptions.go
│ │ │ ├── doc.go
│ │ │ ├── encoding/
│ │ │ │ ├── encoding.go
│ │ │ │ ├── encoding_v2.go
│ │ │ │ ├── internal/
│ │ │ │ │ └── internal.go
│ │ │ │ └── proto/
│ │ │ │ └── proto.go
│ │ │ ├── experimental/
│ │ │ │ └── stats/
│ │ │ │ ├── metricregistry.go
│ │ │ │ └── metrics.go
│ │ │ ├── grpclog/
│ │ │ │ ├── component.go
│ │ │ │ ├── grpclog.go
│ │ │ │ ├── internal/
│ │ │ │ │ ├── grpclog.go
│ │ │ │ │ ├── logger.go
│ │ │ │ │ └── loggerv2.go
│ │ │ │ ├── logger.go
│ │ │ │ └── loggerv2.go
│ │ │ ├── interceptor.go
│ │ │ ├── internal/
│ │ │ │ ├── backoff/
│ │ │ │ │ └── backoff.go
│ │ │ │ ├── balancer/
│ │ │ │ │ └── gracefulswitch/
│ │ │ │ │ ├── config.go
│ │ │ │ │ └── gracefulswitch.go
│ │ │ │ ├── balancerload/
│ │ │ │ │ └── load.go
│ │ │ │ ├── binarylog/
│ │ │ │ │ ├── binarylog.go
│ │ │ │ │ ├── binarylog_testutil.go
│ │ │ │ │ ├── env_config.go
│ │ │ │ │ ├── method_logger.go
│ │ │ │ │ └── sink.go
│ │ │ │ ├── buffer/
│ │ │ │ │ └── unbounded.go
│ │ │ │ ├── channelz/
│ │ │ │ │ ├── channel.go
│ │ │ │ │ ├── channelmap.go
│ │ │ │ │ ├── funcs.go
│ │ │ │ │ ├── logging.go
│ │ │ │ │ ├── server.go
│ │ │ │ │ ├── socket.go
│ │ │ │ │ ├── subchannel.go
│ │ │ │ │ ├── syscall_linux.go
│ │ │ │ │ ├── syscall_nonlinux.go
│ │ │ │ │ └── trace.go
│ │ │ │ ├── credentials/
│ │ │ │ │ ├── credentials.go
│ │ │ │ │ ├── spiffe.go
│ │ │ │ │ ├── syscallconn.go
│ │ │ │ │ └── util.go
│ │ │ │ ├── envconfig/
│ │ │ │ │ ├── envconfig.go
│ │ │ │ │ ├── observability.go
│ │ │ │ │ └── xds.go
│ │ │ │ ├── experimental.go
│ │ │ │ ├── grpclog/
│ │ │ │ │ └── prefix_logger.go
│ │ │ │ ├── grpcsync/
│ │ │ │ │ ├── callback_serializer.go
│ │ │ │ │ ├── event.go
│ │ │ │ │ └── pubsub.go
│ │ │ │ ├── grpcutil/
│ │ │ │ │ ├── compressor.go
│ │ │ │ │ ├── encode_duration.go
│ │ │ │ │ ├── grpcutil.go
│ │ │ │ │ ├── metadata.go
│ │ │ │ │ ├── method.go
│ │ │ │ │ └── regex.go
│ │ │ │ ├── idle/
│ │ │ │ │ └── idle.go
│ │ │ │ ├── internal.go
│ │ │ │ ├── metadata/
│ │ │ │ │ └── metadata.go
│ │ │ │ ├── pretty/
│ │ │ │ │ └── pretty.go
│ │ │ │ ├── proxyattributes/
│ │ │ │ │ └── proxyattributes.go
│ │ │ │ ├── resolver/
│ │ │ │ │ ├── config_selector.go
│ │ │ │ │ ├── delegatingresolver/
│ │ │ │ │ │ └── delegatingresolver.go
│ │ │ │ │ ├── dns/
│ │ │ │ │ │ ├── dns_resolver.go
│ │ │ │ │ │ └── internal/
│ │ │ │ │ │ └── internal.go
│ │ │ │ │ ├── passthrough/
│ │ │ │ │ │ └── passthrough.go
│ │ │ │ │ └── unix/
│ │ │ │ │ └── unix.go
│ │ │ │ ├── serviceconfig/
│ │ │ │ │ ├── duration.go
│ │ │ │ │ └── serviceconfig.go
│ │ │ │ ├── stats/
│ │ │ │ │ ├── labels.go
│ │ │ │ │ ├── metrics_recorder_list.go
│ │ │ │ │ └── stats.go
│ │ │ │ ├── status/
│ │ │ │ │ └── status.go
│ │ │ │ ├── syscall/
│ │ │ │ │ ├── syscall_linux.go
│ │ │ │ │ └── syscall_nonlinux.go
│ │ │ │ ├── tcp_keepalive_others.go
│ │ │ │ ├── tcp_keepalive_unix.go
│ │ │ │ ├── tcp_keepalive_windows.go
│ │ │ │ └── transport/
│ │ │ │ ├── bdp_estimator.go
│ │ │ │ ├── client_stream.go
│ │ │ │ ├── controlbuf.go
│ │ │ │ ├── defaults.go
│ │ │ │ ├── flowcontrol.go
│ │ │ │ ├── handler_server.go
│ │ │ │ ├── http2_client.go
│ │ │ │ ├── http2_server.go
│ │ │ │ ├── http_util.go
│ │ │ │ ├── logging.go
│ │ │ │ ├── networktype/
│ │ │ │ │ └── networktype.go
│ │ │ │ ├── proxy.go
│ │ │ │ ├── server_stream.go
│ │ │ │ └── transport.go
│ │ │ ├── keepalive/
│ │ │ │ └── keepalive.go
│ │ │ ├── mem/
│ │ │ │ ├── buffer_pool.go
│ │ │ │ ├── buffer_slice.go
│ │ │ │ └── buffers.go
│ │ │ ├── metadata/
│ │ │ │ └── metadata.go
│ │ │ ├── peer/
│ │ │ │ └── peer.go
│ │ │ ├── picker_wrapper.go
│ │ │ ├── preloader.go
│ │ │ ├── resolver/
│ │ │ │ ├── dns/
│ │ │ │ │ └── dns_resolver.go
│ │ │ │ ├── map.go
│ │ │ │ └── resolver.go
│ │ │ ├── resolver_wrapper.go
│ │ │ ├── rpc_util.go
│ │ │ ├── server.go
│ │ │ ├── service_config.go
│ │ │ ├── serviceconfig/
│ │ │ │ └── serviceconfig.go
│ │ │ ├── stats/
│ │ │ │ ├── handlers.go
│ │ │ │ ├── metrics.go
│ │ │ │ └── stats.go
│ │ │ ├── status/
│ │ │ │ └── status.go
│ │ │ ├── stream.go
│ │ │ ├── stream_interfaces.go
│ │ │ ├── tap/
│ │ │ │ └── tap.go
│ │ │ ├── trace.go
│ │ │ ├── trace_notrace.go
│ │ │ ├── trace_withtrace.go
│ │ │ └── version.go
│ │ └── protobuf/
│ │ ├── LICENSE
│ │ ├── PATENTS
│ │ ├── encoding/
│ │ │ ├── protojson/
│ │ │ │ ├── decode.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── encode.go
│ │ │ │ └── well_known_types.go
│ │ │ ├── prototext/
│ │ │ │ ├── decode.go
│ │ │ │ ├── doc.go
│ │ │ │ └── encode.go
│ │ │ └── protowire/
│ │ │ └── wire.go
│ │ ├── internal/
│ │ │ ├── descfmt/
│ │ │ │ └── stringer.go
│ │ │ ├── descopts/
│ │ │ │ └── options.go
│ │ │ ├── detrand/
│ │ │ │ └── rand.go
│ │ │ ├── editiondefaults/
│ │ │ │ ├── defaults.go
│ │ │ │ └── editions_defaults.binpb
│ │ │ ├── editionssupport/
│ │ │ │ └── editions.go
│ │ │ ├── encoding/
│ │ │ │ ├── defval/
│ │ │ │ │ └── default.go
│ │ │ │ ├── json/
│ │ │ │ │ ├── decode.go
│ │ │ │ │ ├── decode_number.go
│ │ │ │ │ ├── decode_string.go
│ │ │ │ │ ├── decode_token.go
│ │ │ │ │ └── encode.go
│ │ │ │ ├── messageset/
│ │ │ │ │ └── messageset.go
│ │ │ │ ├── tag/
│ │ │ │ │ └── tag.go
│ │ │ │ └── text/
│ │ │ │ ├── decode.go
│ │ │ │ ├── decode_number.go
│ │ │ │ ├── decode_string.go
│ │ │ │ ├── decode_token.go
│ │ │ │ ├── doc.go
│ │ │ │ └── encode.go
│ │ │ ├── errors/
│ │ │ │ └── errors.go
│ │ │ ├── filedesc/
│ │ │ │ ├── build.go
│ │ │ │ ├── desc.go
│ │ │ │ ├── desc_init.go
│ │ │ │ ├── desc_lazy.go
│ │ │ │ ├── desc_list.go
│ │ │ │ ├── desc_list_gen.go
│ │ │ │ ├── editions.go
│ │ │ │ ├── placeholder.go
│ │ │ │ └── presence.go
│ │ │ ├── filetype/
│ │ │ │ └── build.go
│ │ │ ├── flags/
│ │ │ │ ├── flags.go
│ │ │ │ ├── proto_legacy_disable.go
│ │ │ │ └── proto_legacy_enable.go
│ │ │ ├── genid/
│ │ │ │ ├── any_gen.go
│ │ │ │ ├── api_gen.go
│ │ │ │ ├── descriptor_gen.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── duration_gen.go
│ │ │ │ ├── empty_gen.go
│ │ │ │ ├── field_mask_gen.go
│ │ │ │ ├── go_features_gen.go
│ │ │ │ ├── goname.go
│ │ │ │ ├── map_entry.go
│ │ │ │ ├── name.go
│ │ │ │ ├── source_context_gen.go
│ │ │ │ ├── struct_gen.go
│ │ │ │ ├── timestamp_gen.go
│ │ │ │ ├── type_gen.go
│ │ │ │ ├── wrappers.go
│ │ │ │ └── wrappers_gen.go
│ │ │ ├── impl/
│ │ │ │ ├── api_export.go
│ │ │ │ ├── api_export_opaque.go
│ │ │ │ ├── bitmap.go
│ │ │ │ ├── bitmap_race.go
│ │ │ │ ├── checkinit.go
│ │ │ │ ├── codec_extension.go
│ │ │ │ ├── codec_field.go
│ │ │ │ ├── codec_field_opaque.go
│ │ │ │ ├── codec_gen.go
│ │ │ │ ├── codec_map.go
│ │ │ │ ├── codec_message.go
│ │ │ │ ├── codec_message_opaque.go
│ │ │ │ ├── codec_messageset.go
│ │ │ │ ├── codec_tables.go
│ │ │ │ ├── codec_unsafe.go
│ │ │ │ ├── convert.go
│ │ │ │ ├── convert_list.go
│ │ │ │ ├── convert_map.go
│ │ │ │ ├── decode.go
│ │ │ │ ├── encode.go
│ │ │ │ ├── enum.go
│ │ │ │ ├── equal.go
│ │ │ │ ├── extension.go
│ │ │ │ ├── lazy.go
│ │ │ │ ├── legacy_enum.go
│ │ │ │ ├── legacy_export.go
│ │ │ │ ├── legacy_extension.go
│ │ │ │ ├── legacy_file.go
│ │ │ │ ├── legacy_message.go
│ │ │ │ ├── merge.go
│ │ │ │ ├── merge_gen.go
│ │ │ │ ├── message.go
│ │ │ │ ├── message_opaque.go
│ │ │ │ ├── message_opaque_gen.go
│ │ │ │ ├── message_reflect.go
│ │ │ │ ├── message_reflect_field.go
│ │ │ │ ├── message_reflect_field_gen.go
│ │ │ │ ├── message_reflect_gen.go
│ │ │ │ ├── pointer_unsafe.go
│ │ │ │ ├── pointer_unsafe_opaque.go
│ │ │ │ ├── presence.go
│ │ │ │ └── validate.go
│ │ │ ├── order/
│ │ │ │ ├── order.go
│ │ │ │ └── range.go
│ │ │ ├── pragma/
│ │ │ │ └── pragma.go
│ │ │ ├── protolazy/
│ │ │ │ ├── bufferreader.go
│ │ │ │ ├── lazy.go
│ │ │ │ └── pointer_unsafe.go
│ │ │ ├── set/
│ │ │ │ └── ints.go
│ │ │ ├── strs/
│ │ │ │ ├── strings.go
│ │ │ │ └── strings_unsafe.go
│ │ │ └── version/
│ │ │ └── version.go
│ │ ├── proto/
│ │ │ ├── checkinit.go
│ │ │ ├── decode.go
│ │ │ ├── decode_gen.go
│ │ │ ├── doc.go
│ │ │ ├── encode.go
│ │ │ ├── encode_gen.go
│ │ │ ├── equal.go
│ │ │ ├── extension.go
│ │ │ ├── merge.go
│ │ │ ├── messageset.go
│ │ │ ├── proto.go
│ │ │ ├── proto_methods.go
│ │ │ ├── proto_reflect.go
│ │ │ ├── reset.go
│ │ │ ├── size.go
│ │ │ ├── size_gen.go
│ │ │ ├── wrapperopaque.go
│ │ │ └── wrappers.go
│ │ ├── protoadapt/
│ │ │ └── convert.go
│ │ ├── reflect/
│ │ │ ├── protodesc/
│ │ │ │ ├── desc.go
│ │ │ │ ├── desc_init.go
│ │ │ │ ├── desc_resolve.go
│ │ │ │ ├── desc_validate.go
│ │ │ │ ├── editions.go
│ │ │ │ └── proto.go
│ │ │ ├── protoreflect/
│ │ │ │ ├── methods.go
│ │ │ │ ├── proto.go
│ │ │ │ ├── source.go
│ │ │ │ ├── source_gen.go
│ │ │ │ ├── type.go
│ │ │ │ ├── value.go
│ │ │ │ ├── value_equal.go
│ │ │ │ ├── value_union.go
│ │ │ │ └── value_unsafe.go
│ │ │ └── protoregistry/
│ │ │ └── registry.go
│ │ ├── runtime/
│ │ │ ├── protoiface/
│ │ │ │ ├── legacy.go
│ │ │ │ └── methods.go
│ │ │ └── protoimpl/
│ │ │ ├── impl.go
│ │ │ └── version.go
│ │ └── types/
│ │ ├── descriptorpb/
│ │ │ └── descriptor.pb.go
│ │ ├── gofeaturespb/
│ │ │ └── go_features.pb.go
│ │ └── known/
│ │ ├── anypb/
│ │ │ └── any.pb.go
│ │ ├── durationpb/
│ │ │ └── duration.pb.go
│ │ └── timestamppb/
│ │ └── timestamp.pb.go
│ ├── gopkg.in/
│ │ └── yaml.v3/
│ │ ├── LICENSE
│ │ ├── NOTICE
│ │ ├── README.md
│ │ ├── apic.go
│ │ ├── decode.go
│ │ ├── emitterc.go
│ │ ├── encode.go
│ │ ├── parserc.go
│ │ ├── readerc.go
│ │ ├── resolve.go
│ │ ├── scannerc.go
│ │ ├── sorter.go
│ │ ├── writerc.go
│ │ ├── yaml.go
│ │ ├── yamlh.go
│ │ └── yamlprivateh.go
│ └── modules.txt
└── version/
└── version.go
================================================
FILE CONTENTS
================================================
================================================
FILE: .cirrus.yml
================================================
---
# Main collection of env. vars to set for all tasks and scripts.
env:
####
#### Global variables used for all tasks
####
# Name of the ultimate destination branch for this CI run, PR or post-merge.
DEST_BRANCH: "main"
# Overrides default location (/tmp/cirrus) for repo clone
GOPATH: &gopath "/var/tmp/go"
GOBIN: "${GOPATH}/bin"
GOCACHE: "${GOPATH}/cache"
GOSRC: &gosrc "/var/tmp/go/src/github.com/containers/skopeo"
# Required for consistency with containers/image CI
SKOPEO_PATH: *gosrc
CIRRUS_WORKING_DIR: *gosrc
# The default is 'sh' if unspecified
CIRRUS_SHELL: "/bin/bash"
# Save a little typing (path relative to $CIRRUS_WORKING_DIR)
SCRIPT_BASE: "./contrib/cirrus"
# Google-cloud VM Images
# If you are updating IMAGE_SUFFIX: We are currently using rawhide for
# the containers_image_sequoia tests because the rust-podman-sequoia
# package is not available in earlier releases; once we update to a future
# Fedora release (or if the package is backported), switch back from Rawhide
# to the latest Fedora release.
IMAGE_SUFFIX: "c20260310t170224z-f43f42d14"
FEDORA_CACHE_IMAGE_NAME: "fedora-${IMAGE_SUFFIX}"
RAWHIDE_CACHE_IMAGE_NAME: "rawhide-${IMAGE_SUFFIX}"
# Container FQIN's
FEDORA_CONTAINER_FQIN: "quay.io/libpod/fedora_podman:${IMAGE_SUFFIX}"
# Built along with the standard PR-based workflow in c/automation_images
SKOPEO_CIDEV_CONTAINER_FQIN: "quay.io/libpod/skopeo_cidev:${IMAGE_SUFFIX}"
# Default timeout for each task
timeout_in: 45m
gcp_credentials: ENCRYPTED[52d9e807b531b37ab14e958cb5a72499460663f04c8d73e22ad608c027a31118420f1c80f0be0882fbdf96f49d8f9ac0]
validate_task:
# The git-validation tool doesn't work well on branch or tag push,
# under Cirrus-CI, due to challenges obtaining the starting commit ID.
# Only do validation for PRs.
only_if: &is_pr $CIRRUS_PR != ''
container:
image: '${SKOPEO_CIDEV_CONTAINER_FQIN}'
cpu: 4
memory: 8
setup_script: |
make tools
test_script: |
make validate-local
make vendor && hack/tree_status.sh
doccheck_task:
only_if: *is_pr
depends_on:
- validate
container:
image: "${FEDORA_CONTAINER_FQIN}"
cpu: 4
memory: 8
env:
BUILDTAGS: &withopengpg 'containers_image_openpgp'
script: |
# TODO: Can't use 'runner.sh setup' inside container. However,
# removing the pre-installed package is the only necessary step
# at the time of this comment.
dnf remove -y skopeo # Guarantee non-interference
"${SKOPEO_PATH}/${SCRIPT_BASE}/runner.sh" build
"${SKOPEO_PATH}/${SCRIPT_BASE}/runner.sh" doccheck
osx_task:
# Don't run for docs-only builds.
# Also don't run on release-branches or their PRs,
# since base container-image is not version-constrained.
only_if: ¬_docs_or_release_branch >-
($CIRRUS_BASE_BRANCH == $CIRRUS_DEFAULT_BRANCH ||
$CIRRUS_BRANCH == $CIRRUS_DEFAULT_BRANCH ) &&
$CIRRUS_CHANGE_TITLE !=~ '.*CI:DOCS.*'
depends_on:
- validate
persistent_worker: &mac_pw
labels:
os: darwin
arch: arm64
purpose: prod
env:
CIRRUS_WORKING_DIR: "$HOME/ci/task-${CIRRUS_TASK_ID}"
# Prevent cache-pollution fron one task to the next.
GOPATH: "$CIRRUS_WORKING_DIR/.go"
GOCACHE: "$CIRRUS_WORKING_DIR/.go/cache"
GOENV: "$CIRRUS_WORKING_DIR/.go/support"
GOSRC: "$HOME/ci/task-${CIRRUS_TASK_ID}"
TMPDIR: "/private/tmp/ci"
# This host is/was shared with potentially many other CI tasks.
# The previous task may have been canceled or aborted.
prep_script: &mac_cleanup "contrib/cirrus/mac_cleanup.sh"
test_script:
- export PATH=$GOPATH/bin:$PATH
- go version
- go env
- make tools
- make validate-local test-unit-local bin/skopeo
- bin/skopeo -v
# This host is/was shared with potentially many other CI tasks.
# Ensure nothing is left running while waiting for the next task.
always:
task_cleanup_script: *mac_cleanup
cross_task:
alias: cross
only_if: >-
$CIRRUS_CHANGE_TITLE !=~ '.*CI:DOCS.*'
depends_on:
- validate
gce_instance: &standardvm
image_project: libpod-218412
zone: "us-central1-f"
cpu: 2
memory: "4Gb"
# Required to be 200gig, do not modify - has i/o performance impact
# according to gcloud CLI tool warning messages.
disk: 200
image_name: ${FEDORA_CACHE_IMAGE_NAME}
env:
BUILDTAGS: *withopengpg
setup_script: >-
"${GOSRC}/${SCRIPT_BASE}/runner.sh" setup
cross_script: >-
"${GOSRC}/${SCRIPT_BASE}/runner.sh" cross
ostree-rs-ext_task:
alias: proxy_ostree_ext
only_if: *not_docs_or_release_branch
# WARNING: This task potentially performs a container image
# build (on change) with runtime package installs. Therefore,
# its behavior can be unpredictable and potentially flake-prone.
# In case of emergency, uncomment the next statement to bypass.
#
# skip: $CI == "true"
#
depends_on:
- validate
# Ref: https://cirrus-ci.org/guide/docker-builder-vm/#dockerfile-as-a-ci-environment
container:
# The runtime image will be rebuilt on change
dockerfile: contrib/cirrus/ostree_ext.dockerfile
docker_arguments: # required build-args
BASE_FQIN: quay.io/coreos-assembler/fcos-buildroot:testing-devel
CIRRUS_IMAGE_VERSION: 4
env:
EXT_REPO_NAME: ostree-rs-ext
EXT_REPO_HOME: $CIRRUS_WORKING_DIR/../$EXT_REPO_NAME
EXT_REPO: https://github.com/ostreedev/${EXT_REPO_NAME}.git
skopeo_build_script:
- dnf builddep -y skopeo
- make
- make install
proxy_ostree_ext_build_script:
- git clone --depth 1 $EXT_REPO $EXT_REPO_HOME
- cd $EXT_REPO_HOME
- cargo test --no-run
proxy_ostree_ext_test_script:
- cd $EXT_REPO_HOME
- cargo test -- --nocapture --quiet
#####
##### NOTE: This task is subtantially duplicated in the containers/image
##### repository's `.cirrus.yml`. Changes made here should be fully merged
##### prior to being manually duplicated and maintained in containers/image.
#####
test_skopeo_task:
alias: test_skopeo
# Don't test for [CI:DOCS], [CI:BUILD].
only_if: >-
$CIRRUS_CHANGE_TITLE !=~ '.*CI:BUILD.*' &&
$CIRRUS_CHANGE_TITLE !=~ '.*CI:DOCS.*'
depends_on:
- validate
gce_instance:
image_project: libpod-218412
zone: "us-central1-f"
cpu: 2
memory: "4Gb"
# Required to be 200gig, do not modify - has i/o performance impact
# according to gcloud CLI tool warning messages.
disk: 200
image_name: ${VM_IMAGE_NAME}
matrix:
- name: "Skopeo Test" # N/B: Name ref. by hack/get_fqin.sh
env:
BUILDTAGS: ''
VM_IMAGE_NAME: ${FEDORA_CACHE_IMAGE_NAME}
- name: "Skopeo Test w/ opengpg"
env:
BUILDTAGS: *withopengpg
VM_IMAGE_NAME: ${FEDORA_CACHE_IMAGE_NAME}
- name: "Skopeo test w/ Sequoia (currently Rawhide)"
env:
BUILDTAGS: 'containers_image_sequoia'
# If you are removing the use of rawhide, also remove the VM_IMAGE_NAME condition from runner.sh .
VM_IMAGE_NAME: ${RAWHIDE_CACHE_IMAGE_NAME}
setup_script: >-
"${GOSRC}/${SCRIPT_BASE}/runner.sh" setup
vendor_script: >-
"${SKOPEO_PATH}/${SCRIPT_BASE}/runner.sh" vendor
build_script: >-
"${SKOPEO_PATH}/${SCRIPT_BASE}/runner.sh" build
unit_script: >-
"${SKOPEO_PATH}/${SCRIPT_BASE}/runner.sh" unit
integration_script: >-
"${SKOPEO_PATH}/${SCRIPT_BASE}/runner.sh" integration
system_script: >
"${SKOPEO_PATH}/${SCRIPT_BASE}/runner.sh" system
# This task is critical. It updates the "last-used by" timestamp stored
# in metadata for all VM images. This mechanism functions in tandem with
# an out-of-band pruning operation to remove disused VM images.
meta_task:
name: "VM img. keepalive"
alias: meta
container: &smallcontainer
cpu: 2
memory: 2
image: quay.io/libpod/imgts:latest
env:
# Space-separated list of images used by this repository state
IMGNAMES: |
${FEDORA_CACHE_IMAGE_NAME}
${RAWHIDE_CACHE_IMAGE_NAME}
build-push-${IMAGE_SUFFIX}
BUILDID: "${CIRRUS_BUILD_ID}"
REPOREF: "${CIRRUS_REPO_NAME}"
GCPJSON: ENCRYPTED[6867b5a83e960e7c159a98fe6c8360064567a071c6f4b5e7d532283ecd870aa65c94ccd74bdaa9bf7aadac9d42e20a67]
GCPNAME: ENCRYPTED[1cf558ae125e3c39ec401e443ad76452b25d790c45eb73d77c83eb059a0f7fd5085ef7e2f7e410b04ea6e83b0aab2eb1]
GCPPROJECT: libpod-218412
clone_script: &noop mkdir -p "$CIRRUS_WORKING_DIR"
script: /usr/local/bin/entrypoint.sh
# Status aggregator for all tests. This task simply ensures a defined
# set of tasks all passed, and allows confirming that based on the status
# of this task.
success_task:
name: "Total Success"
alias: success
# N/B: ALL tasks must be listed here, minus their '_task' suffix.
depends_on:
- validate
- doccheck
- osx
- cross
- proxy_ostree_ext
- test_skopeo
- meta
container: *smallcontainer
env:
CTR_FQIN: ${FEDORA_CONTAINER_FQIN}
TEST_ENVIRON: container
clone_script: *noop
script: /bin/true
================================================
FILE: .fmf/version
================================================
1
================================================
FILE: .github/renovate.json5
================================================
/*
Renovate is a service similar to GitHub Dependabot, but with
(fantastically) more configuration options. So many options
in fact, if you're new I recommend glossing over this cheat-sheet
prior to the official documentation:
https://www.augmentedmind.de/2021/07/25/renovate-bot-cheat-sheet
Configuration Update/Change Procedure:
1. Make changes
2. Manually validate changes (from repo-root):
podman run -it \
-v ./.github/renovate.json5:/usr/src/app/renovate.json5:z \
docker.io/renovate/renovate:latest \
renovate-config-validator
3. Commit.
Configuration Reference:
https://docs.renovatebot.com/configuration-options/
Monitoring Dashboard:
https://app.renovatebot.com/dashboard#github/containers
Note: The Renovate bot will create/manage it's business on
branches named 'renovate/*'. Otherwise, and by
default, the only the copy of this file that matters
is the one on the `main` branch. No other branches
will be monitored or touched in any way.
*/
{
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
/*************************************************
****** Global/general configuration options *****
*************************************************/
// Re-use predefined sets of configuration options to DRY
"extends": [
// https://github.com/containers/automation/blob/main/renovate/defaults.json5
"github>containers/automation//renovate/defaults.json5"
],
// Permit automatic rebasing when base-branch changes by more than
// one commit.
"rebaseWhen": "behind-base-branch",
/*************************************************
*** Repository-specific configuration options ***
*************************************************/
}
================================================
FILE: .github/workflows/check_cirrus_cron.yml
================================================
---
# See also:
# https://github.com/containers/podman/blob/main/.github/workflows/check_cirrus_cron.yml
on:
# Note: This only applies to the default branch.
schedule:
# N/B: This should correspond to a period slightly after
# the last job finishes running. See job defs. at:
# https://cirrus-ci.com/settings/repository/6706677464432640
- cron: '03 03 * * 1-5'
# Debug: Allow triggering job manually in github-actions WebUI
workflow_dispatch: {}
jobs:
# Ref: https://docs.github.com/en/actions/using-workflows/reusing-workflows
call_cron_failures:
uses: containers/podman/.github/workflows/check_cirrus_cron.yml@main
secrets:
SECRET_CIRRUS_API_KEY: ${{secrets.SECRET_CIRRUS_API_KEY}}
ACTION_MAIL_SERVER: ${{secrets.ACTION_MAIL_SERVER}}
ACTION_MAIL_USERNAME: ${{secrets.ACTION_MAIL_USERNAME}}
ACTION_MAIL_PASSWORD: ${{secrets.ACTION_MAIL_PASSWORD}}
ACTION_MAIL_SENDER: ${{secrets.ACTION_MAIL_SENDER}}
================================================
FILE: .github/workflows/issue_pr_lock.yml
================================================
---
# See also:
# https://github.com/containers/podman/blob/main/.github/workflows/issue_pr_lock.yml
on:
schedule:
- cron: '0 0 * * *'
# Debug: Allow triggering job manually in github-actions WebUI
workflow_dispatch: {}
jobs:
# Ref: https://docs.github.com/en/actions/using-workflows/reusing-workflows
closed_issue_discussion_lock:
uses: containers/podman/.github/workflows/issue_pr_lock.yml@main
secrets: inherit
permissions:
contents: read
issues: write
pull-requests: write
================================================
FILE: .github/workflows/stale.yml
================================================
name: Mark stale issues and pull requests
# Please refer to https://github.com/actions/stale/blob/master/action.yml
# to see all config knobs of the stale action.
on:
schedule:
- cron: "0 0 * * *"
permissions:
contents: read
jobs:
stale:
permissions:
issues: write # for actions/stale to close stale issues
pull-requests: write # for actions/stale to close stale PRs
runs-on: ubuntu-latest
steps:
- uses: actions/stale@v10
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
stale-issue-message: 'A friendly reminder that this issue had no activity for 30 days.'
stale-pr-message: 'A friendly reminder that this PR had no activity for 30 days.'
stale-issue-label: 'stale-issue'
stale-pr-label: 'stale-pr'
days-before-stale: 30
days-before-close: 365
remove-stale-when-updated: true
================================================
FILE: .gitignore
================================================
*.1
/layers-*
/skopeo
result
/completions/
# ignore JetBrains IDEs (GoLand) config folder
.idea
# Ignore the bin directory
bin
================================================
FILE: .golangci.yml
================================================
version: "2"
formatters:
enable:
- gofumpt
linters:
settings:
staticcheck:
checks:
# Compared to golangci-lint v2.0.2 defaults, we don’t exclude
# ST1003, ST1016, ST1020, ST1021, ST1022 as we don't hit those.
- all
- -ST1000 # Incorrect or missing package comment.
- -ST1005 # Incorrectly formatted error string.
exclusions:
presets:
- std-error-handling
================================================
FILE: .packit.yaml
================================================
---
# See the documentation for more information:
# https://packit.dev/docs/configuration/
# NOTE: The Packit copr_build tasks help to check if every commit builds on
# supported Fedora and CentOS Stream arches.
# They do not block the current Cirrus-based workflow.
downstream_package_name: skopeo
upstream_tag_template: v{version}
packages:
skopeo-fedora:
pkg_tool: fedpkg
specfile_path: rpm/skopeo.spec
skopeo-centos:
pkg_tool: centpkg
specfile_path: rpm/skopeo.spec
skopeo-eln:
specfile_path: rpm/skopeo.spec
# https://packit.dev/docs/configuration/actions
actions:
get-current-version: bash -c 'grep "^const Version" version/version.go | cut -f2 -d\" | tr \- \~'
srpm_build_deps:
- make
jobs:
- job: copr_build
trigger: pull_request
packages: [skopeo-fedora]
notifications: &copr_build_failure_notification
failure_comment:
message: "Ephemeral COPR build failed. @containers/packit-build please check."
targets: &fedora_copr_targets
- fedora-all-x86_64
- fedora-all-aarch64
enable_net: true
# Re-enable these scans if OpenScanHub starts scanning go packages
# https://packit.dev/posts/openscanhub-prototype
osh_diff_scan_after_copr_build: false
- job: copr_build
trigger: pull_request
packages: [skopeo-eln]
notifications: *copr_build_failure_notification
targets: &eln_copr_targets
fedora-eln-x86_64:
additional_repos:
- "https://kojipkgs.fedoraproject.org/repos/eln-build/latest/x86_64/"
fedora-eln-aarch64:
additional_repos:
- "https://kojipkgs.fedoraproject.org/repos/eln-build/latest/aarch64/"
enable_net: true
- job: copr_build
trigger: pull_request
packages: [skopeo-centos]
notifications: *copr_build_failure_notification
targets: ¢os_copr_targets
- centos-stream-9-x86_64
- centos-stream-9-aarch64
- centos-stream-10-x86_64
- centos-stream-10-aarch64
enable_net: true
# Run on commit to main branch
- job: copr_build
trigger: commit
packages: [skopeo-fedora]
branch: main
owner: rhcontainerbot
project: podman-next
enable_net: true
# Tests on Fedora for main branch
- job: tests
trigger: pull_request
packages: [skopeo-fedora]
notifications: &test_failure_notification
failure_comment:
message: "Tests failed. @containers/packit-build please check."
targets: *fedora_copr_targets
tf_extra_params:
environments:
- artifacts:
- type: repository-file
id: https://copr.fedorainfracloud.org/coprs/rhcontainerbot/podman-next/repo/fedora-$releasever/rhcontainerbot-podman-next-fedora-$releasever.repo
# Tests on ELN for main branch
- job: tests
trigger: pull_request
packages: [skopeo-eln]
notifications: *test_failure_notification
targets: *eln_copr_targets
tf_extra_params:
environments:
- artifacts:
- type: repository-file
id: https://copr.fedorainfracloud.org/coprs/rhcontainerbot/podman-next/repo/fedora-eln/rhcontainerbot-podman-next-fedora-eln.repo
# Tests on CentOS Stream for main branch
- job: tests
trigger: pull_request
packages: [skopeo-centos]
notifications: *test_failure_notification
targets: *centos_copr_targets
tf_extra_params:
environments:
- artifacts:
- type: repository-file
id: https://copr.fedorainfracloud.org/coprs/rhcontainerbot/podman-next/repo/centos-stream-$releasever/rhcontainerbot-podman-next-centos-stream-$releasever.repo
# Sync to Fedora
- job: propose_downstream
trigger: release
packages: [skopeo-fedora]
update_release: false
dist_git_branches: &fedora_targets
- fedora-all
actions:
post-modifications: >-
bash -c 'sed -i "s/^\(\s*\)ref: .*/\1ref: v${PACKIT_PROJECT_VERSION}/" ${PACKIT_DOWNSTREAM_REPO}/plans/main.fmf'
# Sync to CentOS Stream
# FIXME: Switch trigger whenever we're ready to update CentOS Stream via
# Packit
- job: propose_downstream
trigger: ignore
packages: [skopeo-centos]
update_release: false
dist_git_branches:
- c10s
# Fedora Koji build
- job: koji_build
trigger: commit
packages: [skopeo-fedora]
sidetag_group: podman-releases
# Dependents are not rpm dependencies, but the package whose bodhi update
# should include this package.
# Ref: https://packit.dev/docs/fedora-releases-guide/releasing-multiple-packages
dependents:
- podman
dist_git_branches: *fedora_targets
================================================
FILE: CODE-OF-CONDUCT.md
================================================
## The skopeo Project Community Code of Conduct
The skopeo project, as part of Podman Container Tools, follows the [CNCF Code of Conduct](https://github.com/cncf/foundation/blob/main/code-of-conduct.md).
================================================
FILE: CONTRIBUTING.md
================================================
# Contributing to Skopeo
We'd love to have you join the community! Below summarizes the processes
that we follow.
## Topics
* [LLM ("AI") Policy](#llm-ai-policy)
* [Reporting Issues](#reporting-issues)
* [Submitting Pull Requests](#submitting-pull-requests)
* [Communications](#communications)
<!--
* [Becoming a Maintainer](#becoming-a-maintainer)
-->
## LLM ("AI") Policy
If your contribution is aided by LLMs or other AI tools, please read the [LLM Policy in the Podman project](https://github.com/containers/podman/blob/main/LLM_POLICY.md).
This project also follows this LLM policy, which includes comments, issues, PRs, and any other interactions with the team.
## Reporting Issues
Before reporting an issue, check our backlog of
[open issues](https://github.com/containers/skopeo/issues)
to see if someone else has already reported it. If so, feel free to add
your scenario, or additional information, to the discussion. Or simply
"subscribe" to it to be notified when it is updated.
If you find a new issue with the project we'd love to hear about it! The most
important aspect of a bug report is that it includes enough information for
us to reproduce it. So, please include as much detail as possible and try
to remove the extra stuff that doesn't really relate to the issue itself.
The easier it is for us to reproduce it, the faster it'll be fixed!
Please don't include any private/sensitive information in your issue!
## Submitting Pull Requests
No Pull Request (PR) is too small! Typos, additional comments in the code,
new testcases, bug fixes, new features, more documentation, ... it's all
welcome!
While bug fixes can first be identified via an "issue", that is not required.
It's ok to just open up a PR with the fix, but make sure you include the same
information you would have included in an issue - like how to reproduce it.
PRs for new features should include some background on what use cases the
new code is trying to address. When possible and when it makes sense, try to break-up
larger PRs into smaller ones - it's easier to review smaller
code changes. But only if those smaller ones make sense as stand-alone PRs.
Regardless of the type of PR, all PRs should include:
* well documented code changes
* additional testcases. Ideally, they should fail w/o your code change applied
* documentation changes
Squash your commits into logical pieces of work that might want to be reviewed
separate from the rest of the PRs. Ideally, each commit should implement a single
idea, and the PR branch should pass the tests at every commit. GitHub makes it easy
to review the cumulative effect of many commits; so, when in doubt, use smaller commits.
PRs that fix issues should include a reference like `Closes #XXXX` in the
commit message so that github will automatically close the referenced issue
when the PR is merged.
<!--
All PRs require at least two LGTMs (Looks Good To Me) from maintainers.
-->
### Sign your PRs
The sign-off is a line at the end of the explanation for the patch. Your
signature certifies that you wrote the patch or otherwise have the right to pass
it on as an open-source patch. The rules are simple: if you can certify
the below (from [developercertificate.org](http://developercertificate.org/)):
```
Developer Certificate of Origin
Version 1.1
Copyright (C) 2004, 2006 The Linux Foundation and its contributors.
660 York Street, Suite 102,
San Francisco, CA 94110 USA
Everyone is permitted to copy and distribute verbatim copies of this
license document, but changing it is not allowed.
Developer's Certificate of Origin 1.1
By making a contribution to this project, I certify that:
(a) The contribution was created in whole or in part by me and I
have the right to submit it under the open source license
indicated in the file; or
(b) The contribution is based upon previous work that, to the best
of my knowledge, is covered under an appropriate open source
license and I have the right under that license to submit that
work with modifications, whether created in whole or in part
by me, under the same open source license (unless I am
permitted to submit under a different license), as indicated
in the file; or
(c) The contribution was provided directly to me by some other
person who certified (a), (b) or (c) and I have not modified
it.
(d) I understand and agree that this project and the contribution
are public and that a record of the contribution (including all
personal information I submit with it, including my sign-off) is
maintained indefinitely and may be redistributed consistent with
this project or the open source license(s) involved.
```
Then you just add a line to every git commit message:
Signed-off-by: Joe Smith <joe.smith@email.com>
Use your real name (sorry, no pseudonyms or anonymous contributions.)
If you set your `user.name` and `user.email` git configs, you can sign your
commit automatically with `git commit -s`.
### Dependencies management
Dependencies are managed via [standard go modules](https://golang.org/ref/mod).
In order to add a new dependency to this project:
- use `go get -d path/to/dep@version` to add a new line to `go.mod`
- run `make vendor`
In order to update an existing dependency:
- use `go get -d -u path/to/dep@version` to update the relevant dependency line in `go.mod`
- run `make vendor`
When new PRs for [containers/container-libs](https://github.com/containers/container-libs) break `skopeo` (i.e. `containers/container-libs` tests fail in `make test-skopeo`):
- create out a new branch in your `skopeo` checkout and switch to it
- find out the version of `containers/container-libs` you want to use and note its commit ID. You might also want to use a fork of `containers/container-libs`, in that case note its repo
- use `go get -d github.com/$REPO/container-libs/image/v5@$COMMIT_ID` to download the right version. The command will fetch the dependency and then fail because of a conflict in `go.mod`, this is expected. Note the pseudo-version (eg. `v5.13.1-0.20210707123201-50afbf0a326`)
- use `go mod edit -replace=go.podman.io/image/v5=github.com/$REPO/container-libs/image/v5@$PSEUDO_VERSION` to add a replacement line to `go.mod` (e.g. `replace go.podman.io/image/v5 => github.com/moio/container-libs/image/v5 v5.13.1-0.20210707123201-50afbf0a3262`)
- run `make vendor`
- make any other necessary changes in the skopeo repo (e.g. add other dependencies now required by `containers/container-libs`, or update skopeo for changed `containers/container-libs` API)
- optionally add new integration tests to the skopeo repo
- submit the resulting branch as a skopeo PR, marked “DO NOT MERGE”
- iterate until tests pass and the PR is reviewed
- then the original `containers/container-libs` PR can be merged, disregarding its `make test-skopeo` failure
- as soon as possible after that, in the skopeo PR, use `go mod edit -dropreplace=go.podman.io/image/v5` to remove the `replace` line in `go.mod`
- run `make vendor`
- update the skopeo PR with the result, drop the “DO NOT MERGE” marking
- after tests complete successfully again, merge the skopeo PR
## Communications
For general questions, or discussions, please use the
[#podman](https://app.slack.com/client/T08PSQ7BQ/C08MXJLCFCN) channel on the [CNCF
Slack](https://cloud-native.slack.com).
For development related discussions, please use the
[#podman-dev](https://app.slack.com/client/T08PSQ7BQ/C08NTKCDC1W) channel on the CNCF
Slack.
For discussions around issues/bugs and features, you can use the github
[issues](https://github.com/containers/skopeo/issues)
and
[PRs](https://github.com/containers/skopeo/pulls)
tracking system.
<!--
## Becoming a Maintainer
To become a maintainer you must first be nominated by an existing maintainer.
If a majority (>50%) of maintainers agree then the proposal is adopted and
you will be added to the list.
Removing a maintainer requires at least 75% of the remaining maintainers
approval, or if the person requests to be removed then it is automatic.
Normally, a maintainer will only be removed if they are considered to be
inactive for a long period of time or are viewed as disruptive to the community.
The current list of maintainers can be found in the
[MAINTAINERS](MAINTAINERS) file.
-->
================================================
FILE: GOVERNANCE.md
================================================
## The Skopeo Project Community Governance
The Skopeo project, as part of Podman Container Tools, follows the [Podman Project Governance](https://github.com/containers/podman/blob/main/GOVERNANCE.md)
except sections found in this document, which override those found in Podman's Governance.
---
# Maintainers File
The definitive source of truth for maintainers of this repository is the local [MAINTAINERS.md](./MAINTAINERS.md) file. The [MAINTAINERS.md](https://github.com/containers/podman/blob/main/MAINTAINERS.md) file in the main Podman repository is used for project-spanning roles, including Core Maintainer and Community Manager. Some repositories in the project will also have a local [OWNERS](./OWNERS) file, which the CI system uses to map users to roles. Any changes to the [OWNERS](./OWNERS) file must make a corresponding change to the [MAINTAINERS.md](./MAINTAINERS.md) file to ensure that the file remains up to date. Most changes to [MAINTAINERS.md](./MAINTAINERS.md) will require a change to the repository’s [OWNERS](.OWNERS) file (e.g., adding a Reviewer), but some will not (e.g., promoting a Maintainer to a Core Maintainer, which comes with no additional CI-related privileges).
Any Core Maintainers listed in Podman’s [MAINTAINERS.md](https://github.com/containers/podman/blob/main/MAINTAINERS.md) file should also be added to the list of “approvers” in the local [OWNERS](./OWNERS) file and as a Core Maintainer in the list of “Maintainers” in the local [MAINTAINERS.md](./MAINTAINERS.md) file.
================================================
FILE: LICENSE
================================================
Apache License
Version 2.0, January 2004
https://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
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.
================================================
FILE: MAINTAINERS.md
================================================
# Skopeo Maintainers
[GOVERNANCE.md](https://github.com/containers/podman/blob/main/GOVERNANCE.md)
describes the project's governance and the Project Roles used below.
## Maintainers
| Maintainer | GitHub ID | Project Roles | Affiliation |
|-------------------|----------------------------------------------------------|----------------------------------|----------------------------------------------|
| Brent Baude | [baude](https://github.com/baude) | Core Maintainer | [Red Hat](https://github.com/RedHatOfficial) |
| Nalin Dahyabhai | [nalind](https://github.com/nalind) | Core Maintainer | [Red Hat](https://github.com/RedHatOfficial) |
| Matthew Heon | [mheon](https://github.com/mheon) | Core Maintainer | [Red Hat](https://github.com/RedHatOfficial) |
| Paul Holzinger | [Luap99](https://github.com/Luap99) | Core Maintainer | [Red Hat](https://github.com/RedHatOfficial) |
| Giuseppe Scrivano | [giuseppe](https://github.com/giuseppe) | Core Maintainer | [Red Hat](https://github.com/RedHatOfficial) |
| Miloslav Trmač | [mtrmac](https://github.com/mtrmac) | Core Maintainer | [Red Hat](https://github.com/RedHatOfficial) |
| Mohan Boddu | [mohanboddu](https://github.com/mohanboddu) | Community Manager | [Red Hat](https://github.com/RedHatOfficial) |
| Neil Smith | [actionmancan](https://github.com/actionmancan) | Community Manager | [Red Hat](https://github.com/RedHatOfficial) |
| Tom Sweeney | [TomSweeneyRedHat](https://github.com/TomSweeneyRedHat/) | Maintainer and Community Manager | [Red Hat](https://github.com/RedHatOfficial) |
| Lokesh Mandvekar | [lsm5](https://github.com/lsm5) | Maintainer | [Red Hat](https://github.com/RedHatOfficial) |
| Dan Walsh | [rhatdan](https://github.com/rhatdan) | Maintainer | [Red Hat](https://github.com/RedHatOfficial) |
| Ashley Cui | [ashley-cui](https://github.com/ashley-cui) | Reviewer | [Red Hat](https://github.com/RedHatOfficial) |
| Valentin Rothberg | [vrothberg](https://github.com/vrothberg) | Reviewer | [Red Hat](https://github.com/RedHatOfficial) |
| Colin Walters | [cgwalters](https://github.com/cgwalters) | Reviewer | [Red Hat](https://github.com/RedHatOfficial) |
## Alumni
None at present
## Credits
The structure of this document was based off of the equivalent one in the [CRI-O Project](https://github.com/cri-o/cri-o/blob/main/MAINTAINERS.md).
## Note
If there is a discrepancy between the [MAINTAINERS.md](https://github.com/containers/podman/blob/main/MAINTAINERS.md) file in the main Podman repository and this file regarding Core Maintainers or Community Managers, the file in the Podman Repository is considered the source of truth.
================================================
FILE: Makefile
================================================
.PHONY: all binary docs docs-in-container build-local clean install install-binary install-completions shell test-integration .install.vndr vendor vendor-in-container
export GOPROXY=https://proxy.golang.org
# The following variables very roughly follow https://www.gnu.org/prep/standards/standards.html#Makefile-Conventions .
DESTDIR ?=
PREFIX ?= /usr/local
ifeq ($(shell uname -s),FreeBSD)
CONTAINERSCONFDIR ?= /usr/local/etc/containers
else
CONTAINERSCONFDIR ?= /etc/containers
endif
REGISTRIESDDIR ?= ${CONTAINERSCONFDIR}/registries.d
LOOKASIDEDIR ?= /var/lib/containers/sigstore
BINDIR ?= ${PREFIX}/bin
MANDIR ?= ${PREFIX}/share/man
BASHINSTALLDIR=${PREFIX}/share/bash-completion/completions
ZSHINSTALLDIR=${PREFIX}/share/zsh/site-functions
FISHINSTALLDIR=${PREFIX}/share/fish/vendor_completions.d
GO ?= go
GOBIN := $(shell $(GO) env GOBIN)
GOOS ?= $(shell go env GOOS)
GOARCH ?= $(shell go env GOARCH)
SEQUOIA_SONAME_DIR =
# N/B: This value is managed by Renovate, manual changes are
# possible, as long as they don't disturb the formatting
# (i.e. DO NOT ADD A 'v' prefix!)
GOLANGCI_LINT_VERSION := 2.11.3
ifeq ($(GOBIN),)
GOBIN := $(GOPATH)/bin
endif
# Scripts may also use CONTAINER_RUNTIME, so we need to export it.
# Note possibly non-obvious aspects of this:
# - We need to use 'command -v' here, not 'which', for compatibility with MacOS.
# - GNU Make 4.2.1 (included in Ubuntu 20.04) incorrectly tries to avoid invoking
# a shell, and fails because there is no /usr/bin/command. The trailing ';' in
# $(shell … ;) defeats that heuristic (recommended in
# https://savannah.gnu.org/bugs/index.php?57625 ).
export CONTAINER_RUNTIME ?= $(if $(shell command -v podman ;),podman,docker)
GOMD2MAN ?= $(if $(shell command -v go-md2man ;),go-md2man,$(GOBIN)/go-md2man)
ifeq ($(DEBUG), 1)
override GOGCFLAGS += -N -l
endif
ifeq ($(GOOS), linux)
ifneq ($(GOARCH),$(filter $(GOARCH),mips mipsle mips64 mips64le ppc64 riscv64))
GO_DYN_FLAGS="-buildmode=pie"
endif
endif
# If $TESTFLAGS is set, it is passed as extra arguments to 'go test' on integration tests.
# You can select certain tests to run, with `-run <regex>` for example:
#
# make test-integration TESTFLAGS='-run copySuite.TestCopy.*'
export TESTFLAGS ?= -timeout=15m
# This is assumed to be set non-empty when operating inside a CI/automation environment
CI ?=
# This env. var. is interpreted by some tests as a permission to
# modify local configuration files and services.
export SKOPEO_CONTAINER_TESTS ?= $(if $(CI),1,0)
# This is a compromise, we either use a container for this or require
# the local user to have a compatible python3 development environment.
# Define it as a "resolve on use" variable to avoid calling out when possible
SKOPEO_CIDEV_CONTAINER_FQIN ?= $(shell hack/get_fqin.sh)
CONTAINER_CMD ?= ${CONTAINER_RUNTIME} run --rm -i -e TESTFLAGS="$(TESTFLAGS)" -e CI=$(CI) -e SKOPEO_CONTAINER_TESTS=1
# if this session isn't interactive, then we don't want to allocate a
# TTY, which would fail, but if it is interactive, we do want to attach
# so that the user can send e.g. ^C through.
INTERACTIVE := $(shell [ -t 0 ] && echo 1 || echo 0)
ifeq ($(INTERACTIVE), 1)
CONTAINER_CMD += -t
endif
CONTAINER_GOSRC = /src/github.com/containers/skopeo
CONTAINER_RUN ?= $(CONTAINER_CMD) --security-opt label=disable -v $(CURDIR):$(CONTAINER_GOSRC) -w $(CONTAINER_GOSRC) $(SKOPEO_CIDEV_CONTAINER_FQIN)
EXTRA_LDFLAGS ?=
SKOPEO_LDFLAGS := -ldflags '-X go.podman.io/image/v5/signature/internal/sequoia.sequoiaLibraryDir=$(SEQUOIA_SONAME_DIR) $(EXTRA_LDFLAGS)'
MANPAGES_MD = $(wildcard docs/*.md)
MANPAGES ?= $(MANPAGES_MD:%.md=%)
BTRFS_BUILD_TAG = $(shell hack/btrfs_installed_tag.sh)
LIBSUBID_BUILD_TAG = $(shell hack/libsubid_tag.sh)
SQLITE_BUILD_TAG = $(shell hack/sqlite_tag.sh)
LOCAL_BUILD_TAGS = $(BTRFS_BUILD_TAG) $(LIBSUBID_BUILD_TAG) $(SQLITE_BUILD_TAG)
BUILDTAGS += $(LOCAL_BUILD_TAGS)
ifeq ($(DISABLE_CGO), 1)
override BUILDTAGS = exclude_graphdriver_btrfs containers_image_openpgp
endif
# make all DEBUG=1
# Note: Uses the -N -l go compiler options to disable compiler optimizations
# and inlining. Using these build options allows you to subsequently
# use source debugging tools like delve.
all: bin/skopeo docs
codespell:
codespell -S Makefile,build,buildah,buildah.spec,imgtype,copy,AUTHORS,bin,vendor,.git,go.sum,CHANGELOG.md,changelog.txt,seccomp.json,.cirrus.yml,"*.xz,*.gz,*.tar,*.tgz,*ico,*.png,*.1,*.5,*.orig,*.rej" -L fpr,uint,iff,od,ERRO -w
help:
@echo "Usage: make <target>"
@echo
@echo "Defaults to building bin/skopeo and docs"
@echo
@echo " * 'install' - Install binaries and documents to system locations"
@echo " * 'binary' - Build skopeo with a container"
@echo " * 'bin/skopeo' - Build skopeo locally"
@echo " * 'bin/skopeo.OS.ARCH' - Build skopeo for specific OS and ARCH"
@echo " * 'test-unit' - Execute unit tests"
@echo " * 'test-integration' - Execute integration tests"
@echo " * 'validate' - Verify whether there is no conflict and all Go source files have been formatted, linted and vetted"
@echo " * 'check' - Including above validate, test-integration and test-unit"
@echo " * 'shell' - Run the built image and attach to a shell"
@echo " * 'clean' - Clean artifacts"
# Do the build and the output (skopeo) should appear in current dir
binary: cmd/skopeo
$(CONTAINER_RUN) make bin/skopeo $(if $(DEBUG),DEBUG=$(DEBUG)) BUILDTAGS='$(BUILDTAGS)'
# Build w/o using containers
.PHONY: bin/skopeo
bin/skopeo:
$(GO) build ${GO_DYN_FLAGS} ${SKOPEO_LDFLAGS} -gcflags "$(GOGCFLAGS)" -tags "$(BUILDTAGS)" -o $@ ./cmd/skopeo
bin/skopeo.%:
GOOS=$(word 2,$(subst ., ,$@)) GOARCH=$(word 3,$(subst ., ,$@)) $(GO) build ${SKOPEO_LDFLAGS} -tags "containers_image_openpgp $(BUILDTAGS)" -o $@ ./cmd/skopeo
local-cross: bin/skopeo.darwin.amd64 bin/skopeo.linux.arm bin/skopeo.linux.arm64 bin/skopeo.windows.386.exe bin/skopeo.windows.amd64.exe
$(MANPAGES): %: %.md
ifneq ($(DISABLE_DOCS), 1)
sed -e 's/\((skopeo.*\.md)\)//' -e 's/\[\(skopeo.*\)\]/\1/' $< | $(GOMD2MAN) -in /dev/stdin -out $@
endif
docs: $(MANPAGES)
docs-in-container:
${CONTAINER_RUN} $(MAKE) docs $(if $(DEBUG),DEBUG=$(DEBUG))
.PHONY: completions
completions: bin/skopeo
install -d -m 755 completions/bash completions/zsh completions/fish completions/powershell
./bin/skopeo completion bash >| completions/bash/skopeo
./bin/skopeo completion zsh >| completions/zsh/_skopeo
./bin/skopeo completion fish >| completions/fish/skopeo.fish
./bin/skopeo completion powershell >| completions/powershell/skopeo.ps1
clean:
rm -rf bin docs/*.1 completions/
install: install-binary install-docs install-completions
install -d -m 755 ${DESTDIR}${LOOKASIDEDIR}
install -d -m 755 ${DESTDIR}${CONTAINERSCONFDIR}
install -m 644 default-policy.json ${DESTDIR}${CONTAINERSCONFDIR}/policy.json
install -d -m 755 ${DESTDIR}${REGISTRIESDDIR}
install -m 644 default.yaml ${DESTDIR}${REGISTRIESDDIR}/default.yaml
install-binary: bin/skopeo
install -d -m 755 ${DESTDIR}${BINDIR}
install -m 755 bin/skopeo ${DESTDIR}${BINDIR}/skopeo
install-docs: docs
ifneq ($(DISABLE_DOCS), 1)
install -d -m 755 ${DESTDIR}${MANDIR}/man1
install -m 644 docs/*.1 ${DESTDIR}${MANDIR}/man1
endif
install-completions: completions
install -d -m 755 ${DESTDIR}${BASHINSTALLDIR}
install -m 644 completions/bash/skopeo ${DESTDIR}${BASHINSTALLDIR}
install -d -m 755 ${DESTDIR}${ZSHINSTALLDIR}
install -m 644 completions/zsh/_skopeo ${DESTDIR}${ZSHINSTALLDIR}
install -d -m 755 ${DESTDIR}${FISHINSTALLDIR}
install -m 644 completions/fish/skopeo.fish ${DESTDIR}${FISHINSTALLDIR}
# There is no common location for powershell files so do not install them. Users have to source the file from their powershell profile.
shell:
$(CONTAINER_RUN) bash
tools:
if [ ! -x "$(GOBIN)/golangci-lint" ]; then \
curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(GOBIN) v$(GOLANGCI_LINT_VERSION) ; \
fi
check: validate test-unit test-integration test-system
test-integration:
# This is intended to be equal to $(CONTAINER_RUN), but with --cap-add=cap_mknod.
# --cap-add=cap_mknod is important to allow skopeo to use containers-storage: directly as it exists in the callers’ environment, without
# creating a nested user namespace (which requires /etc/subuid and /etc/subgid to be set up)
$(CONTAINER_CMD) --security-opt label=disable --cap-add=cap_mknod -v $(CURDIR):$(CONTAINER_GOSRC) -w $(CONTAINER_GOSRC) $(SKOPEO_CIDEV_CONTAINER_FQIN) \
$(MAKE) test-integration-local
# Helper target to set up SKOPEO_BINARY variable for local test targets
# SKOPEO_BINARY only takes effect on `test-integration-local` and
# `test-system-local` targets. It's not propagated into the container used for `test-integration` and
# `test-system`. These targets will (build and) use skopeo binary at
# ./bin/skopeo.
.eval-skopeo-binary: $(if $(SKOPEO_BINARY),,bin/skopeo)
$(eval SKOPEO_BINARY := $(or $(SKOPEO_BINARY),./bin/skopeo))
@echo "Testing with $(SKOPEO_BINARY) ..."
# Primarily intended for CI.
test-integration-local: .eval-skopeo-binary
hack/warn-destructive-tests.sh
cd ./integration && SKOPEO_BINARY="$(abspath $(SKOPEO_BINARY))" $(GO) test $(SKOPEO_LDFLAGS) $(TESTFLAGS) $(if $(BUILDTAGS),-tags "$(BUILDTAGS)")
# complicated set of options needed to run podman-in-podman
test-system:
DTEMP=$(shell mktemp -d --tmpdir=/var/tmp podman-tmp.XXXXXX); \
$(CONTAINER_CMD) --privileged \
-v $(CURDIR):$(CONTAINER_GOSRC) -w $(CONTAINER_GOSRC) \
-v $$DTEMP:/var/lib/containers:Z -v /run/systemd/journal/socket:/run/systemd/journal/socket \
"$(SKOPEO_CIDEV_CONTAINER_FQIN)" \
$(MAKE) test-system-local; \
rc=$$?; \
$(CONTAINER_RUNTIME) unshare rm -rf $$DTEMP; # This probably doesn't work with Docker, oh well, better than nothing... \
exit $$rc
# Primarily intended for CI.
test-system-local: .eval-skopeo-binary
hack/warn-destructive-tests.sh
hack/test-system.sh
test-unit:
# Just call (make test unit-local) here instead of worrying about environment differences
$(CONTAINER_RUN) $(MAKE) test-unit-local
validate:
$(CONTAINER_RUN) $(MAKE) validate-local
# This target is only intended for development, e.g. executing it from an IDE. Use (make test) for CI or pre-release testing.
test-all-local: validate-local validate-docs test-unit-local
.PHONY: fmt
fmt: tools
$(GOBIN)/golangci-lint fmt
.PHONY: validate-local
validate-local: tools
hack/validate-git-marks.sh
$(GOBIN)/golangci-lint run --build-tags "${BUILDTAGS}"
# An extra run with --tests=false allows detecting code unused outside of tests;
# ideally the linter should be able to find this automatically.
# Since everything is already cached, this additional run doesn't take much time.
$(GOBIN)/golangci-lint run --build-tags "${BUILDTAGS}" --tests=false
BUILDTAGS="${BUILDTAGS}" hack/validate-vet.sh
# This invokes bin/skopeo, hence cannot be run as part of validate-local
.PHONY: validate-docs
validate-docs: bin/skopeo
hack/man-page-checker
hack/xref-helpmsgs-manpages
test-unit-local:
$(GO) test $(SKOPEO_LDFLAGS) -tags "$(BUILDTAGS)" $$($(GO) list -tags "$(BUILDTAGS)" -e ./... | grep -v '^github\.com/containers/skopeo/\(integration\|vendor/.*\)$$')
vendor:
$(GO) mod tidy
$(GO) mod vendor
$(GO) mod verify
vendor-in-container:
podman run --privileged --rm --env HOME=/root -v $(CURDIR):/src -w /src golang $(MAKE) vendor
================================================
FILE: OWNERS
================================================
approvers:
- baude
- giuseppe
- lsm5
- Luap99
- mheon
- mtrmac
- nalind
- rhatdan
- TomSweeneyRedHat
reviewers:
- ashley-cui
- baude
- cgwalters
- giuseppe
- lsm5
- Luap99
- mheon
- mtrmac
- nalind
- rhatdan
- TomSweeneyRedHat
- vrothberg
================================================
FILE: README.md
================================================
<p align="center">
<img src="https://cdn.rawgit.com/containers/skopeo/main/docs/skopeo.svg" width="250" alt="Skopeo">
</p>
----


[](https://goreportcard.com/report/github.com/containers/skopeo)
[](https://www.bestpractices.dev/projects/10516)
`skopeo` is a command line utility that performs various operations on container images and image repositories.
`skopeo` does not require the user to be running as root to do most of its operations.
`skopeo` does not require a daemon to be running to perform its operations.
`skopeo` can work with [OCI images](https://github.com/opencontainers/image-spec) as well as the original Docker v2 images.
Skopeo works with API V2 container image registries such as [docker.io](https://docker.io) and [quay.io](https://quay.io) registries, private registries, local directories and local OCI-layout directories. Skopeo can perform operations which consist of:
* Copying an image from and to various storage mechanisms.
For example you can copy images from one registry to another, without requiring privilege.
* Inspecting a remote image showing its properties including its layers, without requiring you to pull the image to the host.
* Deleting an image from an image repository.
* Syncing an external image repository to an internal registry for air-gapped deployments.
* When required by the repository, skopeo can pass the appropriate credentials and certificates for authentication.
Skopeo operates on the following image and repository types:
* containers-storage:docker-reference
An image located in a local containers/storage image store. Both the location and image store are specified in /etc/containers/storage.conf. (This is the backend for [Podman](https://podman.io), [CRI-O](https://cri-o.io), [Buildah](https://buildah.io) and friends)
* dir:path
An existing local directory path storing the manifest, layer tarballs and signatures as individual files. This is a non-standardized format, primarily useful for debugging or noninvasive container inspection.
* docker://docker-reference
An image in a registry implementing the "Docker Registry HTTP API V2". By default, uses the authorization state in `$XDG_RUNTIME_DIR/containers/auth.json`, which is set using `skopeo login`.
* docker-archive:path[:docker-reference]
An image is stored in a `docker save`-formatted file. docker-reference is only used when creating such a file, and it must not contain a digest.
* docker-daemon:docker-reference
An image docker-reference stored in the docker daemon internal storage. docker-reference must contain either a tag or a digest. Alternatively, when reading images, the format can also be docker-daemon:algo:digest (an image ID).
* oci:path:tag
An image tag in a directory compliant with "Open Container Image Layout Specification" at path.
[Obtaining skopeo](./install.md)
-
For a detailed description how to install or build skopeo, see
[install.md](./install.md).
Skopeo is also available as a Container Image on [quay.io](https://quay.io/skopeo/stable). For more information, see the [Skopeo Image](https://github.com/containers/image_build/blob/main/skopeo/README.md) page.
## Inspecting a repository
`skopeo` is able to _inspect_ a repository on a container registry and fetch images layers.
The _inspect_ command fetches the repository's manifest and it is able to show you a `docker inspect`-like
json output about a whole repository or a tag. This tool, in contrast to `docker inspect`, helps you gather useful information about
a repository or a tag before pulling it (using disk space). The inspect command can show you which tags are available for the given
repository, the labels the image has, the creation date and operating system of the image and more.
Examples:
#### Show properties of fedora:latest
```console
$ skopeo inspect docker://registry.fedoraproject.org/fedora:latest
{
"Name": "registry.fedoraproject.org/fedora",
"Digest": "sha256:0f65bee641e821f8118acafb44c2f8fe30c2fc6b9a2b3729c0660376391aa117",
"RepoTags": [
"34-aarch64",
"34",
"latest",
...
],
"Created": "2022-11-24T13:54:18Z",
"DockerVersion": "1.10.1",
"Labels": {
"license": "MIT",
"name": "fedora",
"vendor": "Fedora Project",
"version": "37"
},
"Architecture": "amd64",
"Os": "linux",
"Layers": [
"sha256:2a0fc6bf62e155737f0ace6142ee686f3c471c1aab4241dc3128904db46288f0"
],
"LayersData": [
{
"MIMEType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
"Digest": "sha256:2a0fc6bf62e155737f0ace6142ee686f3c471c1aab4241dc3128904db46288f0",
"Size": 71355009,
"Annotations": null
}
],
"Env": [
"DISTTAG=f37container",
"FGC=f37",
"container=oci"
]
}
```
#### Show container configuration from `fedora:latest`
```console
$ skopeo inspect --config docker://registry.fedoraproject.org/fedora:latest | jq
{
"created": "2020-04-29T06:48:16Z",
"architecture": "amd64",
"os": "linux",
"config": {
"Env": [
"DISTTAG=f32container",
"FGC=f32",
"container=oci"
],
"Cmd": [
"/bin/bash"
],
"Labels": {
"license": "MIT",
"name": "fedora",
"vendor": "Fedora Project",
"version": "32"
}
},
"rootfs": {
"type": "layers",
"diff_ids": [
"sha256:a4c0fa2b217d3fd63d51e55a6fd59432e543d499c0df2b1acd48fbe424f2ddd1"
]
},
"history": [
{
"created": "2020-04-29T06:48:16Z",
"comment": "Created by Image Factory"
}
]
}
```
#### Show unverified image's digest
```console
$ skopeo inspect docker://registry.fedoraproject.org/fedora:latest | jq '.Digest'
"sha256:655721ff613ee766a4126cb5e0d5ae81598e1b0c3bcf7017c36c4d72cb092fe9"
```
## Copying images
`skopeo` can copy container images between various storage mechanisms, including:
* Container registries
- The Quay, Docker Hub, OpenShift, GCR, Artifactory ...
* Container Storage backends
- [github.com/containers/storage](https://github.com/containers/storage) (Backend for [Podman](https://podman.io), [CRI-O](https://cri-o.io), [Buildah](https://buildah.io) and friends)
- Docker daemon storage
* Local directories
* Local OCI-layout directories
```console
$ skopeo copy docker://quay.io/buildah/stable docker://registry.internal.company.com/buildah
$ skopeo copy oci:busybox_ocilayout:latest dir:existingemptydirectory
```
## Deleting images
```console
$ skopeo delete docker://localhost:5000/imagename:latest
```
## Syncing registries
```console
$ skopeo sync --src docker --dest dir registry.example.com/busybox /media/usb
```
## Authenticating to a registry
#### Private registries with authentication
skopeo uses credentials from the --creds (for skopeo inspect|delete) or --src-creds|--dest-creds (for skopeo copy) flags, if set; otherwise it uses configuration set by skopeo login, podman login, buildah login, or docker login.
```console
$ skopeo login --username USER myregistrydomain.com:5000
Password:
$ skopeo inspect docker://myregistrydomain.com:5000/busybox
{"Tag":"latest","Digest":"sha256:473bb2189d7b913ed7187a33d11e743fdc2f88931122a44d91a301b64419f092","RepoTags":["latest"],"Comment":"","Created":"2016-01-15T18:06:41.282540103Z","ContainerConfig":{"Hostname":"aded96b43f48","Domainname":"","User":"","AttachStdin":false,"AttachStdout":false,"AttachStderr":false,"Tty":false,"OpenStdin":false,"StdinOnce":false,"Env":null,"Cmd":["/bin/sh","-c","#(nop) CMD [\"sh\"]"],"Image":"9e77fef7a1c9f989988c06620dabc4020c607885b959a2cbd7c2283c91da3e33","Volumes":null,"WorkingDir":"","Entrypoint":null,"OnBuild":null,"Labels":null},"DockerVersion":"1.8.3","Author":"","Config":{"Hostname":"aded96b43f48","Domainname":"","User":"","AttachStdin":false,"AttachStdout":false,"AttachStderr":false,"Tty":false,"OpenStdin":false,"StdinOnce":false,"Env":null,"Cmd":["sh"],"Image":"9e77fef7a1c9f989988c06620dabc4020c607885b959a2cbd7c2283c91da3e33","Volumes":null,"WorkingDir":"","Entrypoint":null,"OnBuild":null,"Labels":null},"Architecture":"amd64","Os":"linux"}
$ skopeo logout myregistrydomain.com:5000
```
#### Using --creds directly
```console
$ skopeo inspect --creds=testuser:testpassword docker://myregistrydomain.com:5000/busybox
{"Tag":"latest","Digest":"sha256:473bb2189d7b913ed7187a33d11e743fdc2f88931122a44d91a301b64419f092","RepoTags":["latest"],"Comment":"","Created":"2016-01-15T18:06:41.282540103Z","ContainerConfig":{"Hostname":"aded96b43f48","Domainname":"","User":"","AttachStdin":false,"AttachStdout":false,"AttachStderr":false,"Tty":false,"OpenStdin":false,"StdinOnce":false,"Env":null,"Cmd":["/bin/sh","-c","#(nop) CMD [\"sh\"]"],"Image":"9e77fef7a1c9f989988c06620dabc4020c607885b959a2cbd7c2283c91da3e33","Volumes":null,"WorkingDir":"","Entrypoint":null,"OnBuild":null,"Labels":null},"DockerVersion":"1.8.3","Author":"","Config":{"Hostname":"aded96b43f48","Domainname":"","User":"","AttachStdin":false,"AttachStdout":false,"AttachStderr":false,"Tty":false,"OpenStdin":false,"StdinOnce":false,"Env":null,"Cmd":["sh"],"Image":"9e77fef7a1c9f989988c06620dabc4020c607885b959a2cbd7c2283c91da3e33","Volumes":null,"WorkingDir":"","Entrypoint":null,"OnBuild":null,"Labels":null},"Architecture":"amd64","Os":"linux"}
```
```console
$ skopeo copy --src-creds=testuser:testpassword docker://myregistrydomain.com:5000/private oci:local_oci_image
```
Contributing
-
Please read the [contribution guide](CONTRIBUTING.md) if you want to collaborate in the project.
## Commands
| Command | Description |
| -------------------------------------------------- | ---------------------------------------------------------------------------------------------|
| [skopeo-copy(1)](/docs/skopeo-copy.1.md) | Copy an image (manifest, filesystem layers, signatures) from one location to another. |
| [skopeo-delete(1)](/docs/skopeo-delete.1.md) | Mark the image-name for later deletion by the registry's garbage collector. |
| [skopeo-generate-sigstore-key(1)](/docs/skopeo-generate-sigstore-key.1.md) | Generate a sigstore public/private key pair. |
| [skopeo-inspect(1)](/docs/skopeo-inspect.1.md) | Return low-level information about image-name in a registry. |
| [skopeo-list-tags(1)](/docs/skopeo-list-tags.1.md) | Return a list of tags for the transport-specific image repository. |
| [skopeo-login(1)](/docs/skopeo-login.1.md) | Login to a container registry. |
| [skopeo-logout(1)](/docs/skopeo-logout.1.md) | Logout of a container registry. |
| [skopeo-manifest-digest(1)](/docs/skopeo-manifest-digest.1.md) | Compute a manifest digest for a manifest-file and write it to standard output. |
| [skopeo-standalone-sign(1)](/docs/skopeo-standalone-sign.1.md) | Debugging tool - Sign an image locally without uploading. |
| [skopeo-standalone-verify(1)](/docs/skopeo-standalone-verify.1.md)| Debugging tool - Verify an image signature from local files. |
| [skopeo-sync(1)](/docs/skopeo-sync.1.md) | Synchronize images between registry repositories and local directories. |
License
-
skopeo is licensed under the Apache License, Version 2.0. See
[LICENSE](LICENSE) for the full license text.
================================================
FILE: ROADMAP.md
================================================
# Skopeo Roadmap
Skopeo intends to mostly continue to be a very thin CLI wrapper over the [https://github.com/containers/image](containers/image) library, with most features being added there, not to this repo. A typical new Skopeo feature would only add a CLI for a recent containers/image feature.
## Future feature focus (most of the work must be done in the containers/image library)
* OCI artifact support.
* Integration of composefs.
* Partial pull support (zstd:chunked).
* Performance and stability improvements.
* Reductions to the size of the Skopeo binary.
* `skopeo sync` exists, and bugs in it should be fixed, but we don’t have much of an ambition to compete with much larger projects like [https://github.com/openshift/oc-mirror](oc-mirror).
================================================
FILE: SECURITY.md
================================================
## Security and Disclosure Information Policy for the skopeo Project
The skopeo Project follows the [Security and Disclosure Information Policy](https://github.com/containers/common/blob/main/SECURITY.md) for the Containers Projects.
================================================
FILE: cmd/skopeo/completions.go
================================================
package main
import (
"strings"
"github.com/spf13/cobra"
"go.podman.io/image/v5/directory"
"go.podman.io/image/v5/docker"
dockerArchive "go.podman.io/image/v5/docker/archive"
ociArchive "go.podman.io/image/v5/oci/archive"
oci "go.podman.io/image/v5/oci/layout"
"go.podman.io/image/v5/sif"
"go.podman.io/image/v5/tarball"
"go.podman.io/image/v5/transports"
)
func autocompleteImageNames(cmd *cobra.Command, args []string, toComplete string) ([]cobra.Completion, cobra.ShellCompDirective) {
transport, details, haveTransport := strings.Cut(toComplete, ":")
if !haveTransport {
transports := supportedTransportSuggestions()
return transports, cobra.ShellCompDirectiveNoSpace | cobra.ShellCompDirectiveNoFileComp
}
switch transport {
case ociArchive.Transport.Name(), dockerArchive.Transport.Name():
// Can have [:{*reference|@source-index}]
// FIXME: `oci-archive:/path/to/a.oci:<TAB>` completes paths
return nil, cobra.ShellCompDirectiveNoSpace
case sif.Transport.Name():
return nil, cobra.ShellCompDirectiveDefault
// Both directory and oci should have ShellCompDirectiveFilterDirs to complete only directories, but it doesn't currently work in bash: https://github.com/spf13/cobra/issues/2242
case oci.Transport.Name():
// Can have '[:{reference|@source-index}]'
// FIXME: `oci:/path/to/dir/:<TAB>` completes paths
return nil, cobra.ShellCompDirectiveDefault | cobra.ShellCompDirectiveNoSpace
case directory.Transport.Name():
return nil, cobra.ShellCompDirectiveDefault
case docker.Transport.Name():
if details == "" {
return []cobra.Completion{transport + "://"}, cobra.ShellCompDirectiveNoSpace | cobra.ShellCompDirectiveNoFileComp
}
}
return nil, cobra.ShellCompDirectiveNoSpace | cobra.ShellCompDirectiveNoFileComp
}
// supportedTransportSuggestions list all supported transports with the colon suffix.
func supportedTransportSuggestions() []string {
tps := transports.ListNames()
suggestions := make([]cobra.Completion, 0, len(tps))
for _, tp := range tps {
// ListNames is generally expected to filter out deprecated transports.
// tarball: is not deprecated, but it is only usable from a Go caller (using tarball.ConfigUpdater),
// so don’t offer it on the CLI.
if tp != tarball.Transport.Name() {
suggestions = append(suggestions, tp+":")
}
}
return suggestions
}
================================================
FILE: cmd/skopeo/copy.go
================================================
package main
import (
"errors"
"fmt"
"io"
"os"
"strings"
encconfig "github.com/containers/ocicrypt/config"
enchelpers "github.com/containers/ocicrypt/helpers"
"github.com/spf13/cobra"
commonFlag "go.podman.io/common/pkg/flag"
"go.podman.io/common/pkg/retry"
"go.podman.io/image/v5/copy"
"go.podman.io/image/v5/docker/reference"
"go.podman.io/image/v5/manifest"
"go.podman.io/image/v5/transports"
"go.podman.io/image/v5/transports/alltransports"
)
type copyOptions struct {
global *globalOptions
deprecatedTLSVerify *deprecatedTLSVerifyOption
srcImage *imageOptions
destImage *imageDestOptions
retryOpts *retry.Options
copy *sharedCopyOptions
additionalTags []string // For docker-archive: destinations, in addition to the name:tag specified as destination, also add these
signIdentity string // Identity of the signed image, must be a fully specified docker reference
digestFile string // Write digest to this file
quiet bool // Suppress output information when copying images
all bool // Copy all of the images if the source is a list
multiArch commonFlag.OptionalString // How to handle multi architecture images
encryptLayer []int // The list of layers to encrypt
encryptionKeys []string // Keys needed to encrypt the image
decryptionKeys []string // Keys needed to decrypt the image
imageParallelCopies uint // Maximum number of parallel requests when copying images
}
func copyCmd(global *globalOptions) *cobra.Command {
sharedFlags, sharedOpts := sharedImageFlags()
deprecatedTLSVerifyFlags, deprecatedTLSVerifyOpt := deprecatedTLSVerifyFlags()
srcFlags, srcOpts := imageFlags(global, sharedOpts, deprecatedTLSVerifyOpt, "src-", "screds")
destFlags, destOpts := imageDestFlags(global, sharedOpts, deprecatedTLSVerifyOpt, "dest-", "dcreds")
retryFlags, retryOpts := retryFlags()
copyFlags, copyOpts := sharedCopyFlags()
opts := copyOptions{
global: global,
deprecatedTLSVerify: deprecatedTLSVerifyOpt,
srcImage: srcOpts,
destImage: destOpts,
retryOpts: retryOpts,
copy: copyOpts,
}
cmd := &cobra.Command{
Use: "copy [command options] SOURCE-IMAGE DESTINATION-IMAGE",
Short: "Copy an IMAGE-NAME from one location to another",
Long: fmt.Sprintf(`Container "IMAGE-NAME" uses a "transport":"details" format.
Supported transports:
%s
See skopeo(1) section "IMAGE NAMES" for the expected format
`, strings.Join(transports.ListNames(), ", ")),
RunE: commandAction(opts.run),
Example: `skopeo copy docker://quay.io/skopeo/stable:latest docker://registry.example.com/skopeo:latest`,
ValidArgsFunction: autocompleteImageNames,
}
adjustUsage(cmd)
flags := cmd.Flags()
flags.AddFlagSet(&sharedFlags)
flags.AddFlagSet(&deprecatedTLSVerifyFlags)
flags.AddFlagSet(&srcFlags)
flags.AddFlagSet(&destFlags)
flags.AddFlagSet(&retryFlags)
flags.AddFlagSet(©Flags)
flags.StringSliceVar(&opts.additionalTags, "additional-tag", []string{}, "additional tags (supports docker-archive)")
flags.BoolVarP(&opts.quiet, "quiet", "q", false, "Suppress output information when copying images")
flags.BoolVarP(&opts.all, "all", "a", false, "Copy all images if SOURCE-IMAGE is a list")
flags.Var(commonFlag.NewOptionalStringValue(&opts.multiArch), "multi-arch", `How to handle multi-architecture images (system, all, or index-only)`)
flags.StringVar(&opts.signIdentity, "sign-identity", "", "Identity of signed image, must be a fully specified docker reference. Defaults to the target docker reference.")
flags.StringVar(&opts.digestFile, "digestfile", "", "Write the digest of the pushed image to the specified file")
flags.StringSliceVar(&opts.encryptionKeys, "encryption-key", []string{}, "*Experimental* key with the encryption protocol to use needed to encrypt the image (e.g. jwe:/path/to/key.pem)")
flags.IntSliceVar(&opts.encryptLayer, "encrypt-layer", []int{}, "*Experimental* the 0-indexed layer indices, with support for negative indexing (e.g. 0 is the first layer, -1 is the last layer)")
flags.StringSliceVar(&opts.decryptionKeys, "decryption-key", []string{}, "*Experimental* key needed to decrypt the image")
flags.UintVar(&opts.imageParallelCopies, "image-parallel-copies", 0, "Maximum number of image layers to be copied (pulled/pushed) simultaneously. Not setting this field will fall back to containers/image defaults.")
return cmd
}
// parseMultiArch parses the list processing selection
// It returns the copy.ImageListSelection to use with image.Copy option
func parseMultiArch(multiArch string) (copy.ImageListSelection, error) {
switch multiArch {
case "system":
return copy.CopySystemImage, nil
case "all":
return copy.CopyAllImages, nil
// There is no CopyNoImages value in copy.ImageListSelection, but because we
// don't provide an option to select a set of images to copy, we can use
// CopySpecificImages.
case "index-only":
return copy.CopySpecificImages, nil
// We don't expose CopySpecificImages other than index-only above, because
// we currently don't provide an option to choose the images to copy. That
// could be added in the future.
default:
return copy.CopySystemImage, fmt.Errorf("unknown multi-arch option %q. Choose one of the supported options: 'system', 'all', or 'index-only'", multiArch)
}
}
func (opts *copyOptions) run(args []string, stdout io.Writer) (retErr error) {
if len(args) != 2 {
return errorShouldDisplayUsage{errors.New("Exactly two arguments expected")}
}
opts.deprecatedTLSVerify.warnIfUsed([]string{"--src-tls-verify", "--dest-tls-verify"})
imageNames := args
if err := reexecIfNecessaryForImages(imageNames...); err != nil {
return err
}
policyContext, err := opts.global.getPolicyContext()
if err != nil {
return fmt.Errorf("Error loading trust policy: %v", err)
}
defer func() {
if err := policyContext.Destroy(); err != nil {
retErr = noteCloseFailure(retErr, "tearing down policy context", err)
}
}()
srcRef, err := alltransports.ParseImageName(imageNames[0])
if err != nil {
return fmt.Errorf("Invalid source name %s: %v", imageNames[0], err)
}
destRef, err := alltransports.ParseImageName(imageNames[1])
if err != nil {
return fmt.Errorf("Invalid destination name %s: %v", imageNames[1], err)
}
sourceCtx, err := opts.srcImage.newSystemContext()
if err != nil {
return err
}
destinationCtx, err := opts.destImage.newSystemContext()
if err != nil {
return err
}
for _, image := range opts.additionalTags {
ref, err := reference.ParseNormalizedNamed(image)
if err != nil {
return fmt.Errorf("error parsing additional-tag '%s': %v", image, err)
}
namedTagged, isNamedTagged := ref.(reference.NamedTagged)
if !isNamedTagged {
return fmt.Errorf("additional-tag '%s' must be a tagged reference", image)
}
destinationCtx.DockerArchiveAdditionalTags = append(destinationCtx.DockerArchiveAdditionalTags, namedTagged)
}
ctx, cancel := opts.global.commandTimeoutContext()
defer cancel()
if opts.quiet {
stdout = nil
}
imageListSelection := copy.CopySystemImage
if opts.multiArch.Present() && opts.all {
return fmt.Errorf("Cannot use --all and --multi-arch flags together")
}
if opts.multiArch.Present() {
imageListSelection, err = parseMultiArch(opts.multiArch.Value())
if err != nil {
return err
}
}
if opts.all {
imageListSelection = copy.CopyAllImages
}
if len(opts.encryptionKeys) > 0 && len(opts.decryptionKeys) > 0 {
return fmt.Errorf("--encryption-key and --decryption-key cannot be specified together")
}
var encLayers *[]int
var encConfig *encconfig.EncryptConfig
var decConfig *encconfig.DecryptConfig
if len(opts.encryptLayer) > 0 && len(opts.encryptionKeys) == 0 {
return fmt.Errorf("--encrypt-layer can only be used with --encryption-key")
}
if len(opts.encryptionKeys) > 0 {
// encryption
p := opts.encryptLayer
encLayers = &p
encryptionKeys := opts.encryptionKeys
ecc, err := enchelpers.CreateCryptoConfig(encryptionKeys, []string{})
if err != nil {
return fmt.Errorf("Invalid encryption keys: %v", err)
}
cc := encconfig.CombineCryptoConfigs([]encconfig.CryptoConfig{ecc})
encConfig = cc.EncryptConfig
}
if len(opts.decryptionKeys) > 0 {
// decryption
decryptionKeys := opts.decryptionKeys
dcc, err := enchelpers.CreateCryptoConfig([]string{}, decryptionKeys)
if err != nil {
return fmt.Errorf("Invalid decryption keys: %v", err)
}
cc := encconfig.CombineCryptoConfigs([]encconfig.CryptoConfig{dcc})
decConfig = cc.DecryptConfig
}
var signIdentity reference.Named = nil
if opts.signIdentity != "" {
signIdentity, err = reference.ParseNamed(opts.signIdentity)
if err != nil {
return fmt.Errorf("Could not parse --sign-identity: %v", err)
}
}
opts.destImage.warnAboutIneffectiveOptions(destRef.Transport())
copyOpts, cleanupOptions, err := opts.copy.copyOptions(stdout)
if err != nil {
return err
}
defer cleanupOptions()
copyOpts.SignIdentity = signIdentity
copyOpts.SourceCtx = sourceCtx
copyOpts.DestinationCtx = destinationCtx
copyOpts.ImageListSelection = imageListSelection
copyOpts.OciDecryptConfig = decConfig
copyOpts.OciEncryptLayers = encLayers
copyOpts.OciEncryptConfig = encConfig
copyOpts.MaxParallelDownloads = opts.imageParallelCopies
copyOpts.ForceCompressionFormat = opts.destImage.forceCompressionFormat
return retry.IfNecessary(ctx, func() error {
manifestBytes, err := copy.Image(ctx, policyContext, destRef, srcRef, copyOpts)
if err != nil {
return err
}
if opts.digestFile != "" {
manifestDigest, err := manifest.Digest(manifestBytes)
if err != nil {
return err
}
if err = os.WriteFile(opts.digestFile, []byte(manifestDigest.String()), 0o644); err != nil {
return fmt.Errorf("Failed to write digest to file %q: %w", opts.digestFile, err)
}
}
return nil
}, opts.retryOpts)
}
================================================
FILE: cmd/skopeo/copy_test.go
================================================
package main
import "testing"
func TestCopy(t *testing.T) {
// Invalid command-line arguments
for _, args := range [][]string{
{},
{"a1"},
{"a1", "a2", "a3"},
} {
out, err := runSkopeo(append([]string{"--insecure-policy", "copy"}, args...)...)
assertTestFailed(t, out, err, "Exactly two arguments expected")
}
// FIXME: Much more test coverage
// Actual feature tests exist in integration and systemtest
}
================================================
FILE: cmd/skopeo/delete.go
================================================
package main
import (
"errors"
"fmt"
"io"
"strings"
"github.com/spf13/cobra"
"go.podman.io/common/pkg/retry"
"go.podman.io/image/v5/transports"
"go.podman.io/image/v5/transports/alltransports"
)
type deleteOptions struct {
global *globalOptions
image *imageOptions
retryOpts *retry.Options
}
func deleteCmd(global *globalOptions) *cobra.Command {
sharedFlags, sharedOpts := sharedImageFlags()
imageFlags, imageOpts := imageFlags(global, sharedOpts, nil, "", "")
retryFlags, retryOpts := retryFlags()
opts := deleteOptions{
global: global,
image: imageOpts,
retryOpts: retryOpts,
}
cmd := &cobra.Command{
Use: "delete [command options] IMAGE-NAME",
Short: "Delete image IMAGE-NAME",
Long: fmt.Sprintf(`Delete an "IMAGE_NAME" from a transport
Supported transports:
%s
See skopeo(1) section "IMAGE NAMES" for the expected format
`, strings.Join(transports.ListNames(), ", ")),
RunE: commandAction(opts.run),
Example: `skopeo delete docker://registry.example.com/example/pause:latest`,
ValidArgsFunction: autocompleteImageNames,
}
adjustUsage(cmd)
flags := cmd.Flags()
flags.AddFlagSet(&sharedFlags)
flags.AddFlagSet(&imageFlags)
flags.AddFlagSet(&retryFlags)
return cmd
}
func (opts *deleteOptions) run(args []string, stdout io.Writer) error {
if len(args) != 1 {
return errors.New("Usage: delete imageReference")
}
imageName := args[0]
if err := reexecIfNecessaryForImages(imageName); err != nil {
return err
}
ref, err := alltransports.ParseImageName(imageName)
if err != nil {
return fmt.Errorf("Invalid source name %s: %v", imageName, err)
}
sys, err := opts.image.newSystemContext()
if err != nil {
return err
}
ctx, cancel := opts.global.commandTimeoutContext()
defer cancel()
return retry.IfNecessary(ctx, func() error {
return ref.DeleteImage(ctx, sys)
}, opts.retryOpts)
}
================================================
FILE: cmd/skopeo/fixtures/.gitignore
================================================
/*.gpg~
/.gpg-v21-migrated
/private-keys-v1.d
/random_seed
================================================
FILE: cmd/skopeo/fixtures/empty.passphrase
================================================
================================================
FILE: cmd/skopeo/fixtures/image.manifest.json
================================================
{
"schemaVersion": 2,
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"config": {
"mediaType": "application/vnd.docker.container.image.v1+json",
"size": 7023,
"digest": "sha256:b5b2b2c507a0944348e0303114d8d93aaaa081732b86451d9bce1f432a537bc7"
},
"layers": [
{
"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
"size": 32654,
"digest": "sha256:e692418e4cbaf90ca69d05a66403747baa33ee08806650b51fab815ad7fc331f"
},
{
"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
"size": 16724,
"digest": "sha256:3c3a4604a545cdc127456d94e421cd355bca5b528f4a9c1905b15da2eb4a4c6b"
},
{
"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
"size": 73109,
"digest": "sha256:ec4b8955958665577945c89419d1af06b5f7636b4ac3da7f12184802ad867736"
}
]
}
================================================
FILE: cmd/skopeo/fixtures/v2s1-invalid-signatures.manifest.json
================================================
{
"schemaVersion": 1,
"name": "mitr/buxybox",
"tag": "latest",
"architecture": "amd64",
"fsLayers": [
],
"history": [
],
"signatures": 1
}
================================================
FILE: cmd/skopeo/generate_sigstore_key.go
================================================
package main
import (
"errors"
"fmt"
"io"
"io/fs"
"os"
"github.com/spf13/cobra"
"go.podman.io/image/v5/pkg/cli"
"go.podman.io/image/v5/signature/sigstore"
)
type generateSigstoreKeyOptions struct {
outputPrefix string
passphraseFile string
}
func generateSigstoreKeyCmd() *cobra.Command {
var opts generateSigstoreKeyOptions
cmd := &cobra.Command{
Use: "generate-sigstore-key [command options] --output-prefix PREFIX",
Short: "Generate a sigstore public/private key pair",
RunE: commandAction(opts.run),
Example: "skopeo generate-sigstore-key --output-prefix my-key",
}
adjustUsage(cmd)
flags := cmd.Flags()
flags.StringVar(&opts.outputPrefix, "output-prefix", "", "Write the keys to `PREFIX`.pub and `PREFIX`.private")
flags.StringVar(&opts.passphraseFile, "passphrase-file", "", "Read a passphrase for the private key from `PATH`")
return cmd
}
// ensurePathDoesNotExist verifies that path does not refer to an existing file,
// and returns an error if so.
func ensurePathDoesNotExist(path string) error {
switch _, err := os.Stat(path); {
case err == nil:
return fmt.Errorf("Refusing to overwrite existing %q", path)
case errors.Is(err, fs.ErrNotExist):
return nil
default:
return fmt.Errorf("Error checking existence of %q: %w", path, err)
}
}
func (opts *generateSigstoreKeyOptions) run(args []string, stdout io.Writer) error {
if len(args) != 0 || opts.outputPrefix == "" {
return errors.New("Usage: generate-sigstore-key --output-prefix PREFIX")
}
pubKeyPath := opts.outputPrefix + ".pub"
privateKeyPath := opts.outputPrefix + ".private"
if err := ensurePathDoesNotExist(pubKeyPath); err != nil {
return err
}
if err := ensurePathDoesNotExist(privateKeyPath); err != nil {
return err
}
var passphrase string
if opts.passphraseFile != "" {
p, err := cli.ReadPassphraseFile(opts.passphraseFile)
if err != nil {
return err
}
passphrase = p
} else {
p, err := promptForPassphrase(privateKeyPath, os.Stdin, os.Stdout)
if err != nil {
return err
}
passphrase = p
}
keys, err := sigstore.GenerateKeyPair([]byte(passphrase))
if err != nil {
return fmt.Errorf("Error generating key pair: %w", err)
}
if err := os.WriteFile(privateKeyPath, keys.PrivateKey, 0o600); err != nil {
return fmt.Errorf("Error writing private key to %q: %w", privateKeyPath, err)
}
if err := os.WriteFile(pubKeyPath, keys.PublicKey, 0o644); err != nil {
return fmt.Errorf("Error writing private key to %q: %w", pubKeyPath, err)
}
fmt.Fprintf(stdout, "Key written to %q and %q\n", privateKeyPath, pubKeyPath)
return nil
}
================================================
FILE: cmd/skopeo/generate_sigstore_key_test.go
================================================
package main
import (
"os"
"path/filepath"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestGenerateSigstoreKey(t *testing.T) {
// Invalid command-line arguments
for _, args := range [][]string{
{},
{"--output-prefix", "foo", "a1"},
} {
out, err := runSkopeo(append([]string{"generate-sigstore-key"}, args...)...)
assertTestFailed(t, out, err, "Usage")
}
// One of the destination files already exists
outputSuffixes := []string{".pub", ".private"}
for _, suffix := range outputSuffixes {
dir := t.TempDir()
prefix := filepath.Join(dir, "prefix")
err := os.WriteFile(prefix+suffix, []byte{}, 0o600)
require.NoError(t, err)
out, err := runSkopeo("generate-sigstore-key",
"--output-prefix", prefix, "--passphrase-file", "/dev/null",
)
assertTestFailed(t, out, err, "Refusing to overwrite")
}
// One of the destinations is inaccessible (simulate by a symlink that tries to
// traverse a non-directory)
for _, suffix := range outputSuffixes {
dir := t.TempDir()
nonDirectory := filepath.Join(dir, "nondirectory")
err := os.WriteFile(nonDirectory, []byte{}, 0o600)
require.NoError(t, err)
prefix := filepath.Join(dir, "prefix")
err = os.Symlink(filepath.Join(nonDirectory, "unaccessible"), prefix+suffix)
require.NoError(t, err)
out, err := runSkopeo("generate-sigstore-key",
"--output-prefix", prefix, "--passphrase-file", "/dev/null",
)
assertTestFailed(t, out, err, prefix+suffix) // + an OS-specific error message
}
destDir := t.TempDir()
// Error reading passphrase
out, err := runSkopeo("generate-sigstore-key",
"--output-prefix", filepath.Join(destDir, "prefix"),
"--passphrase-file", filepath.Join(destDir, "this-does-not-exist"),
)
assertTestFailed(t, out, err, "this-does-not-exist")
// (The interactive passphrase prompting is not yet tested)
// Error writing outputs is untested: when unit tests run as root, we can’t use permissions on a directory to cause write failures,
// with the --output-prefix mechanism, and refusing to even start writing to pre-exisiting files, directories are the only mechanism
// we have to trigger a write failure.
// Success
// Just a smoke-test, usability of the keys is tested in the generate implementation.
dir := t.TempDir()
prefix := filepath.Join(dir, "prefix")
passphraseFile := filepath.Join(dir, "passphrase")
err = os.WriteFile(passphraseFile, []byte("some passphrase"), 0o600)
require.NoError(t, err)
out, err = runSkopeo("generate-sigstore-key",
"--output-prefix", prefix, "--passphrase-file", passphraseFile,
)
assert.NoError(t, err)
for _, suffix := range outputSuffixes {
assert.Contains(t, out, prefix+suffix)
}
}
================================================
FILE: cmd/skopeo/inspect/output.go
================================================
package inspect
import (
"time"
digest "github.com/opencontainers/go-digest"
"go.podman.io/image/v5/types"
)
// Output is the output format of (skopeo inspect),
// primarily so that we can format it with a simple json.MarshalIndent.
type Output struct {
Name string `json:",omitempty"`
Tag string `json:",omitempty"`
Digest digest.Digest
RepoTags []string
Created *time.Time
DockerVersion string
Labels map[string]string
Architecture string
Os string
Layers []string
LayersData []types.ImageInspectLayer
Env []string
}
================================================
FILE: cmd/skopeo/inspect.go
================================================
package main
import (
"encoding/json"
"errors"
"fmt"
"io"
"strings"
"github.com/containers/skopeo/cmd/skopeo/inspect"
"github.com/docker/distribution/registry/api/errcode"
"github.com/opencontainers/go-digest"
v1 "github.com/opencontainers/image-spec/specs-go/v1"
"github.com/sirupsen/logrus"
"github.com/spf13/cobra"
"go.podman.io/common/pkg/report"
"go.podman.io/common/pkg/retry"
"go.podman.io/image/v5/docker"
"go.podman.io/image/v5/image"
"go.podman.io/image/v5/manifest"
"go.podman.io/image/v5/transports"
"go.podman.io/image/v5/types"
)
type inspectOptions struct {
global *globalOptions
image *imageOptions
retryOpts *retry.Options
format string
raw bool // Output the raw manifest instead of parsing information about the image
config bool // Output the raw config blob instead of parsing information about the image
doNotListTags bool // Do not list all tags available in the same repository
manifestDigest digest.Algorithm // Algorithm to use for computing manifest digest
}
func inspectCmd(global *globalOptions) *cobra.Command {
sharedFlags, sharedOpts := sharedImageFlags()
imageFlags, imageOpts := imageFlags(global, sharedOpts, nil, "", "")
retryFlags, retryOpts := retryFlags()
opts := inspectOptions{
global: global,
image: imageOpts,
retryOpts: retryOpts,
}
cmd := &cobra.Command{
Use: "inspect [command options] IMAGE-NAME",
Short: "Inspect image IMAGE-NAME",
Long: fmt.Sprintf(`Return low-level information about "IMAGE-NAME" in a registry/transport
Supported transports:
%s
See skopeo(1) section "IMAGE NAMES" for the expected format
`, strings.Join(transports.ListNames(), ", ")),
RunE: commandAction(opts.run),
Example: `skopeo inspect docker://registry.fedoraproject.org/fedora
skopeo inspect --config docker://docker.io/alpine
skopeo inspect --format "Name: {{.Name}} Digest: {{.Digest}}" docker://registry.access.redhat.com/ubi8`,
ValidArgsFunction: autocompleteImageNames,
}
adjustUsage(cmd)
flags := cmd.Flags()
flags.AddFlagSet(&sharedFlags)
flags.AddFlagSet(&imageFlags)
flags.AddFlagSet(&retryFlags)
flags.BoolVar(&opts.raw, "raw", false, "output raw manifest or configuration")
flags.BoolVar(&opts.config, "config", false, "output configuration")
flags.StringVarP(&opts.format, "format", "f", "", "Format the output to a Go template")
flags.BoolVarP(&opts.doNotListTags, "no-tags", "n", false, "Do not list the available tags from the repository in the output")
flags.Var(newAlgorithmValue(&opts.manifestDigest), "manifest-digest", "Algorithm to use for computing manifest digest (sha256, sha512); defaults to algorithm used in config digest")
return cmd
}
func (opts *inspectOptions) run(args []string, stdout io.Writer) (retErr error) {
var (
rawManifest []byte
src types.ImageSource
imgInspect *types.ImageInspectInfo
)
ctx, cancel := opts.global.commandTimeoutContext()
defer cancel()
if len(args) != 1 {
return errors.New("Exactly one argument expected")
}
if opts.raw && opts.format != "" {
return errors.New("raw output does not support format option")
}
imageName := args[0]
if err := reexecIfNecessaryForImages(imageName); err != nil {
return err
}
sys, err := opts.image.newSystemContext()
if err != nil {
return err
}
if err := retry.IfNecessary(ctx, func() error {
src, err = parseImageSource(ctx, opts.image, imageName)
return err
}, opts.retryOpts); err != nil {
return fmt.Errorf("Error parsing image name %q: %w", imageName, err)
}
defer func() {
if err := src.Close(); err != nil {
retErr = noteCloseFailure(retErr, "closing image", err)
}
}()
unparsedInstance := image.UnparsedInstance(src, nil)
if err := retry.IfNecessary(ctx, func() error {
rawManifest, _, err = unparsedInstance.Manifest(ctx)
return err
}, opts.retryOpts); err != nil {
return fmt.Errorf("Error retrieving manifest for image: %w", err)
}
if opts.raw && !opts.config {
_, err := stdout.Write(rawManifest)
if err != nil {
return fmt.Errorf("Error writing manifest to standard output: %w", err)
}
return nil
}
img, err := image.FromUnparsedImage(ctx, sys, unparsedInstance)
if err != nil {
return fmt.Errorf("Error parsing manifest for image: %w", err)
}
if opts.config && opts.raw {
var configBlob []byte
if err := retry.IfNecessary(ctx, func() error {
configBlob, err = img.ConfigBlob(ctx)
return err
}, opts.retryOpts); err != nil {
return fmt.Errorf("Error reading configuration blob: %w", err)
}
_, err = stdout.Write(configBlob)
if err != nil {
return fmt.Errorf("Error writing configuration blob to standard output: %w", err)
}
return nil
} else if opts.config {
var config *v1.Image
if err := retry.IfNecessary(ctx, func() error {
config, err = img.OCIConfig(ctx)
return err
}, opts.retryOpts); err != nil {
return fmt.Errorf("Error reading OCI-formatted configuration data: %w", err)
}
if err := opts.writeOutput(stdout, config); err != nil {
return fmt.Errorf("Error writing OCI-formatted configuration data to standard output: %w", err)
}
return nil
}
if err := retry.IfNecessary(ctx, func() error {
imgInspect, err = img.Inspect(ctx)
return err
}, opts.retryOpts); err != nil {
return err
}
outputData := inspect.Output{
Name: "", // Set below if DockerReference() is known
Tag: imgInspect.Tag,
// Digest is set below.
RepoTags: []string{}, // Possibly overridden for docker.Transport.
Created: imgInspect.Created,
DockerVersion: imgInspect.DockerVersion,
Labels: imgInspect.Labels,
Architecture: imgInspect.Architecture,
Os: imgInspect.Os,
Layers: imgInspect.Layers,
LayersData: imgInspect.LayersData,
Env: imgInspect.Env,
}
outputData.Digest, err = manifestDigestFromManifest(rawManifest, img, opts.manifestDigest)
if err != nil {
return fmt.Errorf("Error computing manifest digest: %w", err)
}
if dockerRef := img.Reference().DockerReference(); dockerRef != nil {
outputData.Name = dockerRef.Name()
}
if !opts.doNotListTags && img.Reference().Transport() == docker.Transport {
sys, err := opts.image.newSystemContext()
if err != nil {
return err
}
outputData.RepoTags, err = docker.GetRepositoryTags(ctx, sys, img.Reference())
if err != nil {
// Some registries may decide to block the "list all tags" endpoint;
// gracefully allow the inspect to continue in this case:
fatalFailure := true
// - AWS ECR rejects it if the "ecr:ListImages" action is not allowed.
// https://github.com/containers/skopeo/issues/726
var ec errcode.ErrorCoder
if ok := errors.As(err, &ec); ok && ec.ErrorCode() == errcode.ErrorCodeDenied {
fatalFailure = false
}
// - public.ecr.aws does not implement the endpoint at all, and fails with 404:
// https://github.com/containers/skopeo/issues/1230
// This is actually "code":"NOT_FOUND", and the parser doesn’t preserve that.
// So, also check the error text.
if ok := errors.As(err, &ec); ok && ec.ErrorCode() == errcode.ErrorCodeUnknown {
var e errcode.Error
if ok := errors.As(err, &e); ok && e.Code == errcode.ErrorCodeUnknown && e.Message == "404 page not found" {
fatalFailure = false
}
}
if fatalFailure {
return fmt.Errorf("Error determining repository tags: %w", err)
}
logrus.Warnf("Registry disallows tag list retrieval; skipping")
}
}
return opts.writeOutput(stdout, outputData)
}
// writeOutput writes data depending on opts.format to stdout
func (opts *inspectOptions) writeOutput(stdout io.Writer, data any) error {
if report.IsJSON(opts.format) || opts.format == "" {
out, err := json.MarshalIndent(data, "", " ")
if err == nil {
fmt.Fprintf(stdout, "%s\n", string(out))
}
return err
}
rpt, err := report.New(stdout, "skopeo inspect").Parse(report.OriginUser, opts.format)
if err != nil {
return err
}
defer rpt.Flush()
return rpt.Execute([]any{data})
}
func manifestDigestFromManifest(manifestBlob []byte, img types.Image, userAlgorithm digest.Algorithm) (digest.Digest, error) {
if userAlgorithm != "" {
if !userAlgorithm.Available() {
return "", fmt.Errorf("digest algorithm %q is not available", userAlgorithm)
}
return manifest.DigestWithAlgorithm(manifestBlob, userAlgorithm)
}
configInfo := img.ConfigInfo()
if configInfo.Digest != "" {
alg := configInfo.Digest.Algorithm()
if !alg.Available() {
return "", fmt.Errorf("config digest algorithm %q is not available", alg)
}
return manifest.DigestWithAlgorithm(manifestBlob, alg)
}
return manifest.Digest(manifestBlob)
}
type algorithmValue digest.Algorithm
func newAlgorithmValue(alg *digest.Algorithm) *algorithmValue {
return (*algorithmValue)(alg)
}
func (a *algorithmValue) Set(value string) error {
algorithm := digest.Algorithm(value)
*a = algorithmValue(algorithm)
if algorithm == "" {
*a = algorithmValue(digest.Canonical)
}
return nil
}
func (a *algorithmValue) String() string {
return digest.Algorithm(*a).String()
}
func (a *algorithmValue) Type() string {
return "algorithm"
}
================================================
FILE: cmd/skopeo/layers.go
================================================
package main
import (
"errors"
"fmt"
"io"
"os"
"strings"
"github.com/opencontainers/go-digest"
"github.com/spf13/cobra"
"go.podman.io/common/pkg/retry"
"go.podman.io/image/v5/directory"
"go.podman.io/image/v5/image"
"go.podman.io/image/v5/pkg/blobinfocache"
"go.podman.io/image/v5/types"
)
type layersOptions struct {
global *globalOptions
image *imageOptions
retryOpts *retry.Options
}
func layersCmd(global *globalOptions) *cobra.Command {
sharedFlags, sharedOpts := sharedImageFlags()
imageFlags, imageOpts := imageFlags(global, sharedOpts, nil, "", "")
retryFlags, retryOpts := retryFlags()
opts := layersOptions{
global: global,
image: imageOpts,
retryOpts: retryOpts,
}
cmd := &cobra.Command{
Hidden: true,
Use: "layers [command options] IMAGE-NAME [LAYER...]",
Short: "Get layers of IMAGE-NAME",
RunE: commandAction(opts.run),
}
adjustUsage(cmd)
flags := cmd.Flags()
flags.AddFlagSet(&sharedFlags)
flags.AddFlagSet(&imageFlags)
flags.AddFlagSet(&retryFlags)
return cmd
}
func (opts *layersOptions) run(args []string, stdout io.Writer) (retErr error) {
fmt.Fprintln(os.Stderr, `DEPRECATED: skopeo layers is deprecated in favor of skopeo copy`)
if len(args) == 0 {
return errors.New("Usage: layers imageReference [layer...]")
}
imageName := args[0]
if err := reexecIfNecessaryForImages(imageName); err != nil {
return err
}
ctx, cancel := opts.global.commandTimeoutContext()
defer cancel()
sys, err := opts.image.newSystemContext()
if err != nil {
return err
}
cache := blobinfocache.DefaultCache(sys)
var (
rawSource types.ImageSource
src types.ImageCloser
)
if err = retry.IfNecessary(ctx, func() error {
rawSource, err = parseImageSource(ctx, opts.image, imageName)
return err
}, opts.retryOpts); err != nil {
return err
}
if err = retry.IfNecessary(ctx, func() error {
src, err = image.FromSource(ctx, sys, rawSource)
return err
}, opts.retryOpts); err != nil {
if closeErr := rawSource.Close(); closeErr != nil {
return fmt.Errorf("%w (closing image source: %v)", err, closeErr)
}
return err
}
defer func() {
if err := src.Close(); err != nil {
retErr = noteCloseFailure(retErr, "closing image", err)
}
}()
type blobDigest struct {
digest digest.Digest
isConfig bool
}
var blobDigests []blobDigest
for _, dString := range args[1:] {
if !strings.HasPrefix(dString, "sha256:") {
dString = "sha256:" + dString
}
d, err := digest.Parse(dString)
if err != nil {
return err
}
blobDigests = append(blobDigests, blobDigest{digest: d, isConfig: false})
}
if len(blobDigests) == 0 {
layers := src.LayerInfos()
seenLayers := map[digest.Digest]struct{}{}
for _, info := range layers {
if _, ok := seenLayers[info.Digest]; !ok {
blobDigests = append(blobDigests, blobDigest{digest: info.Digest, isConfig: false})
seenLayers[info.Digest] = struct{}{}
}
}
configInfo := src.ConfigInfo()
if configInfo.Digest != "" {
blobDigests = append(blobDigests, blobDigest{digest: configInfo.Digest, isConfig: true})
}
}
tmpDir, err := os.MkdirTemp(".", "layers-")
if err != nil {
return err
}
tmpDirRef, err := directory.NewReference(tmpDir)
if err != nil {
return err
}
dest, err := tmpDirRef.NewImageDestination(ctx, nil)
if err != nil {
return err
}
defer func() {
if err := dest.Close(); err != nil {
retErr = noteCloseFailure(retErr, "closing destination", err)
}
}()
for _, bd := range blobDigests {
var (
r io.ReadCloser
blobSize int64
)
if err = retry.IfNecessary(ctx, func() error {
r, blobSize, err = rawSource.GetBlob(ctx, types.BlobInfo{Digest: bd.digest, Size: -1}, cache)
return err
}, opts.retryOpts); err != nil {
return err
}
defer func() {
if err := r.Close(); err != nil {
retErr = noteCloseFailure(retErr, fmt.Sprintf("closing blob %q", bd.digest.String()), err)
}
}()
verifier := bd.digest.Verifier()
tr := io.TeeReader(r, verifier)
if _, err := dest.PutBlob(ctx, tr, types.BlobInfo{Digest: bd.digest, Size: blobSize}, cache, bd.isConfig); err != nil {
return err
}
if _, err := io.Copy(io.Discard, tr); err != nil { // Ensure we process all of tr, so that we can validate the digest.
return err
}
if !verifier.Verified() {
return fmt.Errorf("corrupt blob %q", bd.digest.String())
}
}
var manifest []byte
if err = retry.IfNecessary(ctx, func() error {
manifest, _, err = src.Manifest(ctx)
return err
}, opts.retryOpts); err != nil {
return err
}
if err := dest.PutManifest(ctx, manifest, nil); err != nil {
return err
}
return dest.Commit(ctx, image.UnparsedInstance(rawSource, nil))
}
================================================
FILE: cmd/skopeo/list_tags.go
================================================
package main
import (
"context"
"encoding/json"
"errors"
"fmt"
"io"
"maps"
"slices"
"strings"
"github.com/spf13/cobra"
"go.podman.io/common/pkg/retry"
"go.podman.io/image/v5/docker"
"go.podman.io/image/v5/docker/archive"
"go.podman.io/image/v5/docker/reference"
"go.podman.io/image/v5/transports/alltransports"
"go.podman.io/image/v5/types"
)
// tagListOutput is the output format of (skopeo list-tags), primarily so that we can format it with a simple json.MarshalIndent.
type tagListOutput struct {
Repository string `json:",omitempty"`
Tags []string
}
type tagsOptions struct {
global *globalOptions
image *imageOptions
retryOpts *retry.Options
}
var transportHandlers = map[string]func(ctx context.Context, sys *types.SystemContext, opts *tagsOptions, userInput string) (repositoryName string, tagListing []string, err error){
docker.Transport.Name(): listDockerRepoTags,
archive.Transport.Name(): listDockerArchiveTags,
}
// supportedTransports returns all the supported transports
func supportedTransports(joinStr string) string {
res := slices.Sorted(maps.Keys(transportHandlers))
return strings.Join(res, joinStr)
}
func tagsCmd(global *globalOptions) *cobra.Command {
sharedFlags, sharedOpts := sharedImageFlags()
imageFlags, imageOpts := dockerImageFlags(global, sharedOpts, nil, "", "")
retryFlags, retryOpts := retryFlags()
opts := tagsOptions{
global: global,
image: imageOpts,
retryOpts: retryOpts,
}
cmd := &cobra.Command{
Use: "list-tags [command options] SOURCE-IMAGE",
Short: "List tags in the transport/repository specified by the SOURCE-IMAGE",
Long: `Return the list of tags from the transport/repository "SOURCE-IMAGE"
Supported transports:
` + supportedTransports(" ") + `
See skopeo-list-tags(1) section "REPOSITORY NAMES" for the expected format
`,
RunE: commandAction(opts.run),
Example: `skopeo list-tags docker://docker.io/fedora`,
}
adjustUsage(cmd)
flags := cmd.Flags()
flags.AddFlagSet(&sharedFlags)
flags.AddFlagSet(&imageFlags)
flags.AddFlagSet(&retryFlags)
return cmd
}
// Customized version of the alltransports.ParseImageName and docker.ParseReference that does not place a default tag in the reference
// Would really love to not have this, but needed to enforce tag-less and digest-less names
func parseDockerRepositoryReference(refString string) (types.ImageReference, error) {
dockerRefString, ok := strings.CutPrefix(refString, docker.Transport.Name()+"://")
if !ok {
return nil, fmt.Errorf("docker: image reference %s does not start with %s://", refString, docker.Transport.Name())
}
ref, err := reference.ParseNormalizedNamed(dockerRefString)
if err != nil {
return nil, err
}
if !reference.IsNameOnly(ref) {
return nil, errors.New(`No tag or digest allowed in reference`)
}
// Checks ok, now return a reference. This is a hack because the tag listing code expects a full image reference even though the tag is ignored
return docker.NewReference(reference.TagNameOnly(ref))
}
// List the tags from a repository contained in the imgRef reference. Any tag value in the reference is ignored
func listDockerTags(ctx context.Context, sys *types.SystemContext, imgRef types.ImageReference) (string, []string, error) {
repositoryName := imgRef.DockerReference().Name()
tags, err := docker.GetRepositoryTags(ctx, sys, imgRef)
if err != nil {
return ``, nil, fmt.Errorf("Error listing repository tags: %w", err)
}
return repositoryName, tags, nil
}
// return the tagLists from a docker repo
func listDockerRepoTags(ctx context.Context, sys *types.SystemContext, opts *tagsOptions, userInput string) (repositoryName string, tagListing []string, err error) {
// Do transport-specific parsing and validation to get an image reference
imgRef, err := parseDockerRepositoryReference(userInput)
if err != nil {
return
}
if err = retry.IfNecessary(ctx, func() error {
repositoryName, tagListing, err = listDockerTags(ctx, sys, imgRef)
return err
}, opts.retryOpts); err != nil {
return
}
return
}
// return the tagLists from a docker archive file
func listDockerArchiveTags(_ context.Context, sys *types.SystemContext, _ *tagsOptions, userInput string) (repositoryName string, tagListing []string, err error) {
ref, err := alltransports.ParseImageName(userInput)
if err != nil {
return
}
tarReader, _, err := archive.NewReaderForReference(sys, ref)
if err != nil {
return
}
defer tarReader.Close()
imageRefs, err := tarReader.List()
if err != nil {
return
}
var repoTags []string
for imageIndex, items := range imageRefs {
for _, ref := range items {
repoTags, err = tarReader.ManifestTagsForReference(ref)
if err != nil {
return
}
// handle for each untagged image
if len(repoTags) == 0 {
repoTags = []string{fmt.Sprintf("@%d", imageIndex)}
}
tagListing = append(tagListing, repoTags...)
}
}
return
}
func (opts *tagsOptions) run(args []string, stdout io.Writer) (retErr error) {
ctx, cancel := opts.global.commandTimeoutContext()
defer cancel()
if len(args) != 1 {
return errorShouldDisplayUsage{errors.New("Exactly one non-option argument expected")}
}
sys, err := opts.image.newSystemContext()
if err != nil {
return err
}
transport := alltransports.TransportFromImageName(args[0])
if transport == nil {
return fmt.Errorf("Invalid %q: does not specify a transport", args[0])
}
var repositoryName string
var tagListing []string
if val, ok := transportHandlers[transport.Name()]; ok {
repositoryName, tagListing, err = val(ctx, sys, opts, args[0])
if err != nil {
return err
}
} else {
return fmt.Errorf("Unsupported transport '%s' for tag listing. Only supported: %s",
transport.Name(), supportedTransports(", "))
}
outputData := tagListOutput{
Repository: repositoryName,
Tags: tagListing,
}
out, err := json.MarshalIndent(outputData, "", " ")
if err != nil {
return err
}
_, err = fmt.Fprintf(stdout, "%s\n", string(out))
return err
}
================================================
FILE: cmd/skopeo/list_tags_test.go
================================================
package main
import (
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"go.podman.io/image/v5/transports/alltransports"
)
// Tests the kinds of inputs allowed and expected to the command
func TestDockerRepositoryReferenceParser(t *testing.T) {
for _, test := range [][]string{
{"docker://myhost.com:1000/nginx"}, // no tag
{"docker://myhost.com/nginx"}, // no port or tag
{"docker://somehost.com"}, // Valid default expansion
{"docker://nginx"}, // Valid default expansion
} {
ref, err := parseDockerRepositoryReference(test[0])
require.NoError(t, err)
expected, err := alltransports.ParseImageName(test[0])
require.NoError(t, err)
assert.Equal(t, expected.DockerReference().Name(), ref.DockerReference().Name(), "Mismatched parse result for input %v", test[0])
}
for _, test := range [][]string{
{"oci://somedir"},
{"dir:/somepath"},
{"docker-archive:/tmp/dir"},
{"container-storage:myhost.com/someimage"},
{"docker-daemon:myhost.com/someimage"},
{"docker://myhost.com:1000/nginx:foobar:foobar"}, // Invalid repository ref
{"docker://somehost.com:5000/"}, // no repo
{"docker://myhost.com:1000/nginx:latest"}, // tag not allowed
{"docker://myhost.com:1000/nginx@sha256:abcdef1234567890"}, // digest not allowed
} {
_, err := parseDockerRepositoryReference(test[0])
assert.Error(t, err, test[0])
}
}
func TestDockerRepositoryReferenceParserDrift(t *testing.T) {
for _, test := range [][]string{
{"docker://myhost.com:1000/nginx", "myhost.com:1000/nginx"}, // no tag
{"docker://myhost.com/nginx", "myhost.com/nginx"}, // no port or tag
{"docker://somehost.com", "docker.io/library/somehost.com"}, // Valid default expansion
{"docker://nginx", "docker.io/library/nginx"}, // Valid default expansion
} {
ref, err := parseDockerRepositoryReference(test[0])
ref2, err2 := alltransports.ParseImageName(test[0])
if assert.NoError(t, err, "Could not parse, got error on %v", test[0]) && assert.NoError(t, err2, "Could not parse with regular parser, got error on %v", test[0]) {
assert.Equal(t, ref.DockerReference().String(), ref2.DockerReference().String(), "Different parsing output for input %v. Repo parse = %v, regular parser = %v", test[0], ref, ref2)
}
}
}
func TestListTags(t *testing.T) {
// Invalid command-line arguments
for _, args := range [][]string{
{},
{"a1", "a2"},
} {
out, err := runSkopeo(append([]string{"list-tags"}, args...)...)
assertTestFailed(t, out, err, "Exactly one non-option argument expected")
}
// FIXME: Much more test coverage
// Actual feature tests exist in systemtest
}
================================================
FILE: cmd/skopeo/login.go
================================================
package main
import (
"io"
"os"
"github.com/spf13/cobra"
"go.podman.io/common/pkg/auth"
commonFlag "go.podman.io/common/pkg/flag"
"go.podman.io/image/v5/types"
)
type loginOptions struct {
global *globalOptions
loginOpts auth.LoginOptions
tlsVerify commonFlag.OptionalBool
}
func loginCmd(global *globalOptions) *cobra.Command {
opts := loginOptions{
global: global,
}
cmd := &cobra.Command{
Use: "login [command options] REGISTRY",
Short: "Login to a container registry",
Long: "Login to a container registry on a specified server.",
RunE: commandAction(opts.run),
Example: `skopeo login quay.io`,
}
adjustUsage(cmd)
flags := cmd.Flags()
flags.AddFlagSet(auth.GetLoginFlags(&opts.loginOpts))
commonFlag.OptionalBoolFlag(flags, &opts.tlsVerify, "tls-verify", "require HTTPS and verify certificates when accessing the registry")
return cmd
}
func (opts *loginOptions) run(args []string, stdout io.Writer) error {
ctx, cancel := opts.global.commandTimeoutContext()
defer cancel()
opts.loginOpts.Stdout = stdout
opts.loginOpts.Stdin = os.Stdin
opts.loginOpts.AcceptRepositories = true
sys, err := opts.global.newSystemContext()
if err != nil {
return err
}
if opts.tlsVerify.Present() {
sys.DockerInsecureSkipTLSVerify = types.NewOptionalBool(!opts.tlsVerify.Value())
}
return auth.Login(ctx, sys, &opts.loginOpts, args)
}
================================================
FILE: cmd/skopeo/login_test.go
================================================
package main
import (
"path/filepath"
"testing"
)
func TestLogin(t *testing.T) {
dir := t.TempDir()
authFile := filepath.Join(dir, "auth.json")
compatAuthFile := filepath.Join(dir, "config.json")
// Just a trivial smoke-test exercising one error-handling path.
// We can’t test full operation without a registry, unit tests should mostly
// exist in c/common/pkg/auth, not here.
out, err := runSkopeo("login", "--authfile", authFile, "--compat-auth-file", compatAuthFile, "example.com")
assertTestFailed(t, out, err, "options for paths to the credential file and to the Docker-compatible credential file can not be set simultaneously")
}
================================================
FILE: cmd/skopeo/logout.go
================================================
package main
import (
"io"
"github.com/spf13/cobra"
"go.podman.io/common/pkg/auth"
commonFlag "go.podman.io/common/pkg/flag"
"go.podman.io/image/v5/types"
)
type logoutOptions struct {
global *globalOptions
logoutOpts auth.LogoutOptions
tlsVerify commonFlag.OptionalBool
}
func logoutCmd(global *globalOptions) *cobra.Command {
opts := logoutOptions{
global: global,
}
cmd := &cobra.Command{
Use: "logout [command options] REGISTRY",
Short: "Logout of a container registry",
Long: "Logout of a container registry on a specified server.",
RunE: commandAction(opts.run),
Example: `skopeo logout quay.io`,
}
adjustUsage(cmd)
flags := cmd.Flags()
flags.AddFlagSet(auth.GetLogoutFlags(&opts.logoutOpts))
commonFlag.OptionalBoolFlag(flags, &opts.tlsVerify, "tls-verify", "require HTTPS and verify certificates when accessing the registry")
return cmd
}
func (opts *logoutOptions) run(args []string, stdout io.Writer) error {
opts.logoutOpts.Stdout = stdout
opts.logoutOpts.AcceptRepositories = true
sys, err := opts.global.newSystemContext()
if err != nil {
return err
}
if opts.tlsVerify.Present() {
sys.DockerInsecureSkipTLSVerify = types.NewOptionalBool(!opts.tlsVerify.Value())
}
return auth.Logout(sys, &opts.logoutOpts, args)
}
================================================
FILE: cmd/skopeo/logout_test.go
================================================
package main
import (
"os"
"path/filepath"
"testing"
"github.com/stretchr/testify/require"
)
func TestLogout(t *testing.T) {
dir := t.TempDir()
authFile := filepath.Join(dir, "auth.json")
compatAuthFile := filepath.Join(dir, "config.json")
// Just a trivial smoke-test exercising one error-handling path.
// We can’t test full operation without a registry, unit tests should mostly
// exist in c/common/pkg/auth, not here.
err := os.WriteFile(authFile, []byte("{}"), 0o700)
require.NoError(t, err)
err = os.WriteFile(compatAuthFile, []byte("{}"), 0o700)
require.NoError(t, err)
out, err := runSkopeo("logout", "--authfile", authFile, "--compat-auth-file", compatAuthFile, "example.com")
assertTestFailed(t, out, err, "options for paths to the credential file and to the Docker-compatible credential file can not be set simultaneously")
}
================================================
FILE: cmd/skopeo/main.go
================================================
package main
import (
"context"
"fmt"
"runtime/debug"
"strings"
"time"
"github.com/containers/skopeo/version"
"github.com/sirupsen/logrus"
"github.com/spf13/cobra"
commonFlag "go.podman.io/common/pkg/flag"
"go.podman.io/image/v5/pkg/cli/basetls/tlsdetails"
"go.podman.io/image/v5/signature"
"go.podman.io/image/v5/types"
"go.podman.io/storage/pkg/reexec"
)
var defaultUserAgent = "skopeo/" + version.Version
type globalOptions struct {
debug bool // Enable debug output
tlsVerify commonFlag.OptionalBool // Require HTTPS and verify certificates (for docker: and docker-daemon:)
tlsDetailsPath string // Path to a containers-tls-details.yaml(5) file
policyPath string // Path to a signature verification policy file
insecurePolicy bool // Use an "allow everything" signature verification policy
registriesDirPath string // Path to a "registries.d" registry configuration directory
overrideArch string // Architecture to use for choosing images, instead of the runtime one
overrideOS string // OS to use for choosing images, instead of the runtime one
overrideVariant string // Architecture variant to use for choosing images, instead of the runtime one
commandTimeout time.Duration // Timeout for the command execution
registriesConfPath string // Path to the "registries.conf" file
tmpDir string // Path to use for big temporary files
userAgentPrefix string // Prefix to add to the user agent string
requireSigned bool // Require any pulled image to be signed
}
// requireSubcommand returns an error if no sub command is provided
// This was copied from podman: `github.com/containers/podman/cmd/podman/validate/args.go
// Some small style changes to match skopeo were applied, but try to apply any
// bugfixes there first.
func requireSubcommand(cmd *cobra.Command, args []string) error {
if len(args) > 0 {
suggestions := cmd.SuggestionsFor(args[0])
if len(suggestions) == 0 {
return fmt.Errorf("Unrecognized command `%[1]s %[2]s`\nTry '%[1]s --help' for more information", cmd.CommandPath(), args[0])
}
return fmt.Errorf("Unrecognized command `%[1]s %[2]s`\n\nDid you mean this?\n\t%[3]s\n\nTry '%[1]s --help' for more information", cmd.CommandPath(), args[0], strings.Join(suggestions, "\n\t"))
}
return fmt.Errorf("Missing command '%[1]s COMMAND'\nTry '%[1]s --help' for more information", cmd.CommandPath())
}
// createApp returns a cobra.Command, and the underlying globalOptions object, to be run or tested.
func createApp() (*cobra.Command, *globalOptions) {
opts := globalOptions{}
rootCommand := &cobra.Command{
Use: "skopeo",
Long: "Various operations with container images and container image registries",
RunE: requireSubcommand,
PersistentPreRunE: opts.before,
SilenceUsage: true,
SilenceErrors: true,
// Hide the completion command which is provided by cobra
CompletionOptions: cobra.CompletionOptions{HiddenDefaultCmd: true},
// This is documented to parse "local" (non-PersistentFlags) flags of parent commands before
// running subcommands and handling their options. We don't really run into such cases,
// because all of our flags on rootCommand are in PersistentFlags, except for the deprecated --tls-verify;
// in that case we need TraverseChildren so that we can distinguish between
// (skopeo --tls-verify inspect) (causes a warning) and (skopeo inspect --tls-verify) (no warning).
TraverseChildren: true,
}
// We don’t use debug.ReadBuildInfo to automate version.Version, because that would not work well for builds from
// a released tarball (e.g. RPM builds).
if commit := gitCommit(); commit != "" {
rootCommand.Version = fmt.Sprintf("%s commit: %s", version.Version, commit)
} else {
rootCommand.Version = version.Version
}
// Override default `--version` global flag to enable `-v` shorthand
var dummyVersion bool
rootCommand.Flags().BoolVarP(&dummyVersion, "version", "v", false, "Version for Skopeo")
rootCommand.PersistentFlags().BoolVar(&opts.debug, "debug", false, "enable debug output")
rootCommand.PersistentFlags().StringVar(&opts.tlsDetailsPath, "tls-details", "", "path to a containers-tls-details.yaml(5) file")
rootCommand.PersistentFlags().StringVar(&opts.policyPath, "policy", "", "Path to a trust policy file")
rootCommand.PersistentFlags().BoolVar(&opts.insecurePolicy, "insecure-policy", false, "run the tool without any policy check")
rootCommand.PersistentFlags().BoolVar(&opts.requireSigned, "require-signed", false, "require any pulled image to be signed")
rootCommand.PersistentFlags().StringVar(&opts.registriesDirPath, "registries.d", "", "use registry configuration files in `DIR` (e.g. for container signature storage)")
rootCommand.PersistentFlags().StringVar(&opts.overrideArch, "override-arch", "", "use `ARCH` instead of the architecture of the machine for choosing images")
rootCommand.PersistentFlags().StringVar(&opts.overrideOS, "override-os", "", "use `OS` instead of the running OS for choosing images")
rootCommand.PersistentFlags().StringVar(&opts.overrideVariant, "override-variant", "", "use `VARIANT` instead of the running architecture variant for choosing images")
rootCommand.PersistentFlags().DurationVar(&opts.commandTimeout, "command-timeout", 0, "timeout for the command execution")
rootCommand.PersistentFlags().StringVar(&opts.registriesConfPath, "registries-conf", "", "path to the registries.conf file")
if err := rootCommand.PersistentFlags().MarkHidden("registries-conf"); err != nil {
logrus.Fatal("unable to mark registries-conf flag as hidden")
}
rootCommand.PersistentFlags().StringVar(&opts.tmpDir, "tmpdir", "", "directory used to store temporary files")
rootCommand.PersistentFlags().StringVar(&opts.userAgentPrefix, "user-agent-prefix", "", "prefix to add to the user agent string")
flag := commonFlag.OptionalBoolFlag(rootCommand.Flags(), &opts.tlsVerify, "tls-verify", "Require HTTPS and verify certificates when accessing the registry")
flag.Hidden = true
rootCommand.AddCommand(
copyCmd(&opts),
deleteCmd(&opts),
generateSigstoreKeyCmd(),
inspectCmd(&opts),
layersCmd(&opts),
loginCmd(&opts),
logoutCmd(&opts),
manifestDigestCmd(),
proxyCmd(&opts),
syncCmd(&opts),
standaloneSignCmd(),
standaloneVerifyCmd(),
tagsCmd(&opts),
untrustedSignatureDumpCmd(),
)
return rootCommand, &opts
}
// gitCommit returns the git commit for this codebase, if we are built from a git repo; "" otherwise.
func gitCommit() string {
bi, ok := debug.ReadBuildInfo()
if !ok {
logrus.Fatal("runtime.ReadBuildInfo failed")
}
for _, e := range bi.Settings {
if e.Key == "vcs.revision" {
return e.Value
}
}
return ""
}
// before is run by the cli package for any command, before running the command-specific handler.
func (opts *globalOptions) before(cmd *cobra.Command, args []string) error {
if opts.debug {
logrus.SetLevel(logrus.DebugLevel)
}
if opts.tlsVerify.Present() {
logrus.Warn("'--tls-verify' is deprecated, please set this on the specific subcommand")
}
if opts.insecurePolicy && opts.requireSigned {
return fmt.Errorf("--insecure-policy and --require-signed are mutually exclusive")
}
return nil
}
func main() {
if reexec.Init() {
return
}
rootCmd, _ := createApp()
if err := rootCmd.Execute(); err != nil {
if isNotFoundImageError(err) {
logrus.StandardLogger().Log(logrus.FatalLevel, err)
logrus.Exit(2)
}
logrus.Fatal(err)
}
}
// getPolicyContext returns a *signature.PolicyContext based on opts.
func (opts *globalOptions) getPolicyContext() (*signature.PolicyContext, error) {
var policy *signature.Policy // This could be cached across calls in opts.
if opts.insecurePolicy {
policy = &signature.Policy{Default: []signature.PolicyRequirement{signature.NewPRInsecureAcceptAnything()}}
} else if opts.policyPath == "" {
sys, err := opts.newSystemContext()
if err != nil {
return nil, err
}
p, err := signature.DefaultPolicy(sys)
if err != nil {
return nil, err
}
policy = p
} else {
p, err := signature.NewPolicyFromFile(opts.policyPath)
if err != nil {
return nil, err
}
policy = p
}
pc, err := signature.NewPolicyContext(policy)
if err != nil {
return nil, err
}
if opts.requireSigned {
pc.RequireSignatureVerification(true)
}
return pc, nil
}
// commandTimeoutContext returns a context.Context and a cancellation callback based on opts.
// The caller should usually "defer cancel()" immediately after calling this.
func (opts *globalOptions) commandTimeoutContext() (context.Context, context.CancelFunc) {
ctx := context.Background()
var cancel context.CancelFunc = func() {}
if opts.commandTimeout > 0 {
ctx, cancel = context.WithTimeout(ctx, opts.commandTimeout)
}
return ctx, cancel
}
// newSystemContext returns a *types.SystemContext corresponding to opts.
// It is guaranteed to return a fresh instance, so it is safe to make additional updates to it.
func (opts *globalOptions) newSystemContext() (*types.SystemContext, error) {
userAgent := defaultUserAgent
if opts.userAgentPrefix != "" {
userAgent = opts.userAgentPrefix + " " + defaultUserAgent
}
baseTLSConfig, err := tlsdetails.BaseTLSFromOptionalFile(opts.tlsDetailsPath)
if err != nil {
return nil, err
}
ctx := &types.SystemContext{
RegistriesDirPath: opts.registriesDirPath,
ArchitectureChoice: opts.overrideArch,
OSChoice: opts.overrideOS,
VariantChoice: opts.overrideVariant,
SystemRegistriesConfPath: opts.registriesConfPath,
BigFilesTemporaryDir: opts.tmpDir,
BaseTLSConfig: baseTLSConfig.TLSConfig(),
DockerRegistryUserAgent: userAgent,
}
// DEPRECATED: We support this for backward compatibility, but override it if a per-image flag is provided.
if opts.tlsVerify.Present() {
ctx.DockerInsecureSkipTLSVerify = types.NewOptionalBool(!opts.tlsVerify.Value())
}
return ctx, nil
}
================================================
FILE: cmd/skopeo/main_test.go
================================================
package main
import (
"bytes"
"crypto/tls"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"go.podman.io/image/v5/types"
)
// runSkopeo creates an app object and runs it with args, with an implied first "skopeo".
// Returns output intended for stdout and the returned error, if any.
func runSkopeo(args ...string) (string, error) {
app, _ := createApp()
stdout := bytes.Buffer{}
app.SetOut(&stdout)
app.SetArgs(args)
err := app.Execute()
return stdout.String(), err
}
func TestGlobalOptionsNewSystemContext(t *testing.T) {
// Default state
opts, _ := fakeGlobalOptions(t, []string{})
res, err := opts.newSystemContext()
require.NoError(t, err)
assert.Equal(t, &types.SystemContext{
// User-Agent is set by default.
DockerRegistryUserAgent: defaultUserAgent,
}, res)
// Set everything to non-default values.
opts, _ = fakeGlobalOptions(t, []string{
"--registries.d", "/srv/registries.d",
"--override-arch", "overridden-arch",
"--override-os", "overridden-os",
"--override-variant", "overridden-variant",
"--tls-details", "../../integration/fixtures/tls-details-pqc-only.yaml",
"--tmpdir", "/srv",
"--registries-conf", "/srv/registries.conf",
"--tls-verify=false",
})
res, err = opts.newSystemContext()
require.NoError(t, err)
assert.Equal(t, &types.SystemContext{
RegistriesDirPath: "/srv/registries.d",
ArchitectureChoice: "overridden-arch",
OSChoice: "overridden-os",
VariantChoice: "overridden-variant",
BaseTLSConfig: &tls.Config{
MinVersion: tls.VersionTLS13,
CurvePreferences: []tls.CurveID{tls.X25519MLKEM768},
},
BigFilesTemporaryDir: "/srv",
SystemRegistriesConfPath: "/srv/registries.conf",
DockerInsecureSkipTLSVerify: types.OptionalBoolTrue,
DockerRegistryUserAgent: defaultUserAgent,
}, res)
}
================================================
FILE: cmd/skopeo/manifest.go
================================================
package main
import (
"errors"
"fmt"
"io"
"os"
"github.com/spf13/cobra"
"go.podman.io/image/v5/manifest"
)
type manifestDigestOptions struct{}
func manifestDigestCmd() *cobra.Command {
var opts manifestDigestOptions
cmd := &cobra.Command{
Use: "manifest-digest MANIFEST-FILE",
Short: "Compute a manifest digest of a file",
RunE: commandAction(opts.run),
Example: "skopeo manifest-digest manifest.json",
}
adjustUsage(cmd)
return cmd
}
func (opts *manifestDigestOptions) run(args []string, stdout io.Writer) error {
if len(args) != 1 {
return errors.New("Usage: skopeo manifest-digest manifest")
}
manifestPath := args[0]
man, err := os.ReadFile(manifestPath)
if err != nil {
return fmt.Errorf("Error reading manifest from %s: %v", manifestPath, err)
}
digest, err := manifest.Digest(man)
if err != nil {
return fmt.Errorf("Error computing digest: %v", err)
}
fmt.Fprintf(stdout, "%s\n", digest)
return nil
}
================================================
FILE: cmd/skopeo/manifest_test.go
================================================
package main
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestManifestDigest(t *testing.T) {
// Invalid command-line arguments
for _, args := range [][]string{
{},
{"a1", "a2"},
} {
out, err := runSkopeo(append([]string{"manifest-digest"}, args...)...)
assertTestFailed(t, out, err, "Usage")
}
// Error reading manifest
out, err := runSkopeo("manifest-digest", "/this/does/not/exist")
assertTestFailed(t, out, err, "/this/does/not/exist")
// Error computing manifest
out, err = runSkopeo("manifest-digest", "fixtures/v2s1-invalid-signatures.manifest.json")
assertTestFailed(t, out, err, "computing digest")
// Success
out, err = runSkopeo("manifest-digest", "fixtures/image.manifest.json")
assert.NoError(t, err)
assert.Equal(t, fixturesTestImageManifestDigest.String()+"\n", out)
}
================================================
FILE: cmd/skopeo/proxy.go
================================================
//go:build !windows
package main
/*
This command is still experimental. Documentation
is available in
docs-experimental/skopeo-experimental-image-proxy.1.md
*/
import (
"context"
"io"
"github.com/spf13/cobra"
"go.podman.io/common/pkg/json-proxy"
)
type proxyOptions struct {
global *globalOptions
imageOpts *imageOptions
sockFd int
}
func proxyCmd(global *globalOptions) *cobra.Command {
sharedFlags, sharedOpts := sharedImageFlags()
imageFlags, imageOpts := imageFlags(global, sharedOpts, nil, "", "")
opts := proxyOptions{global: global, imageOpts: imageOpts}
cmd := &cobra.Command{
Use: "experimental-image-proxy [command options] IMAGE",
Short: "Interactive proxy for fetching container images (EXPERIMENTAL)",
Long: `Run skopeo as a proxy, supporting HTTP requests to fetch manifests and blobs.`,
RunE: commandAction(opts.run),
Args: cobra.ExactArgs(0),
// Not stabilized yet
Hidden: true,
Example: `skopeo experimental-image-proxy --sockfd 3`,
}
adjustUsage(cmd)
flags := cmd.Flags()
flags.AddFlagSet(&sharedFlags)
flags.AddFlagSet(&imageFlags)
flags.IntVar(&opts.sockFd, "sockfd", 0, "Serve on opened socket pair (default 0/stdin)")
return cmd
}
// Implementation of podman experimental-image-proxy using the library
func (opts *proxyOptions) run(args []string, stdout io.Writer) error {
manager, err := jsonproxy.NewManager(
jsonproxy.WithSystemContext(opts.imageOpts.newSystemContext),
jsonproxy.WithPolicyContext(opts.global.getPolicyContext),
)
if err != nil {
return err
}
defer manager.Close()
return manager.Serve(context.Background(), opts.sockFd)
}
================================================
FILE: cmd/skopeo/proxy_windows.go
================================================
//go:build windows
package main
import (
"fmt"
"io"
"github.com/spf13/cobra"
)
type proxyOptions struct {
global *globalOptions
}
func proxyCmd(global *globalOptions) *cobra.Command {
opts := proxyOptions{global: global}
cmd := &cobra.Command{
RunE: commandAction(opts.run),
Args: cobra.ExactArgs(0),
// Not stabilized yet
Hidden: true,
}
return cmd
}
func (opts *proxyOptions) run(args []string, stdout io.Writer) error {
return fmt.Errorf("This command is not supported on Windows")
}
================================================
FILE: cmd/skopeo/signing.go
================================================
package main
import (
"encoding/json"
"errors"
"fmt"
"io"
"os"
"strings"
"github.com/spf13/cobra"
"go.podman.io/image/v5/pkg/cli"
"go.podman.io/image/v5/signature"
)
type standaloneSignOptions struct {
output string // Output file path
passphraseFile string // Path pointing to a passphrase file when signing
}
func standaloneSignCmd() *cobra.Command {
opts := standaloneSignOptions{}
cmd := &cobra.Command{
Use: "standalone-sign [command options] MANIFEST DOCKER-REFERENCE KEY-FINGERPRINT --output|-o SIGNATURE",
Short: "Create a signature using local files",
RunE: commandAction(opts.run),
}
adjustUsage(cmd)
flags := cmd.Flags()
flags.StringVarP(&opts.output, "output", "o", "", "output the signature to `SIGNATURE`")
flags.StringVarP(&opts.passphraseFile, "passphrase-file", "", "", "file that contains a passphrase for the --sign-by key")
return cmd
}
func (opts *standaloneSignOptions) run(args []string, stdout io.Writer) error {
if len(args) != 3 || opts.output == "" {
return errors.New("Usage: skopeo standalone-sign manifest docker-reference key-fingerprint -o signature")
}
manifestPath := args[0]
dockerReference := args[1]
fingerprint := args[2]
manifest, err := os.ReadFile(manifestPath)
if err != nil {
return fmt.Errorf("Error reading %s: %w", manifestPath, err)
}
mech, err := signature.NewGPGSigningMechanism()
if err != nil {
return fmt.Errorf("Error initializing GPG: %w", err)
}
defer mech.Close()
passphrase, err := cli.ReadPassphraseFile(opts.passphraseFile)
if err != nil {
return err
}
signature, err := signature.SignDockerManifestWithOptions(manifest, dockerReference, mech, fingerprint, &signature.SignOptions{Passphrase: passphrase})
if err != nil {
return fmt.Errorf("Error creating signature: %w", err)
}
if err := os.WriteFile(opts.output, signature, 0o644); err != nil {
return fmt.Errorf("Error writing signature to %s: %w", opts.output, err)
}
return nil
}
type standaloneVerifyOptions struct {
publicKeyFile string
}
func standaloneVerifyCmd() *cobra.Command {
opts := standaloneVerifyOptions{}
cmd := &cobra.Command{
Use: "standalone-verify MANIFEST DOCKER-REFERENCE KEY-FINGERPRINTS SIGNATURE",
Short: "Verify a signature using local files",
Long: `Verify a signature using local files
KEY-FINGERPRINTS can be a comma separated list of fingerprints, or "any" if you trust all the keys in the public key file.`,
RunE: commandAction(opts.run),
}
flags := cmd.Flags()
flags.StringVar(&opts.publicKeyFile, "public-key-file", "", `File containing public keys. If not specified, will use local GPG keys.`)
adjustUsage(cmd)
return cmd
}
func (opts *standaloneVerifyOptions) run(args []string, stdout io.Writer) error {
if len(args) != 4 {
return errors.New("Usage: skopeo standalone-verify manifest docker-reference key-fingerprint signature")
}
manifestPath := args[0]
expectedDockerReference := args[1]
expectedFingerprints := strings.Split(args[2], ",")
signaturePath := args[3]
if opts.publicKeyFile == "" && len(expectedFingerprints) == 1 && expectedFingerprints[0] == "any" {
return fmt.Errorf("Cannot use any fingerprint without a public key file")
}
unverifiedManifest, err := os.ReadFile(manifestPath)
if err != nil {
return fmt.Errorf("Error reading manifest from %s: %w", manifestPath, err)
}
unverifiedSignature, err := os.ReadFile(signaturePath)
if err != nil {
return fmt.Errorf("Error reading signature from %s: %w", signaturePath, err)
}
var mech signature.SigningMechanism
var publicKeyfingerprints []string
if opts.publicKeyFile != "" {
publicKeys, err := os.ReadFile(opts.publicKeyFile)
if err != nil {
return fmt.Errorf("Error reading public keys from %s: %w", opts.publicKeyFile, err)
}
mech, publicKeyfingerprints, err = signature.NewEphemeralGPGSigningMechanism(publicKeys)
if err != nil {
return fmt.Errorf("Error initializing GPG: %w", err)
}
} else {
mech, err = signature.NewGPGSigningMechanism()
if err != nil {
return fmt.Errorf("Error initializing GPG: %w", err)
}
}
defer mech.Close()
if len(expectedFingerprints) == 1 && expectedFingerprints[0] == "any" {
expectedFingerprints = publicKeyfingerprints
}
sig, verificationFingerprint, err := signature.VerifyImageManifestSignatureUsingKeyIdentityList(unverifiedSignature, unverifiedManifest, expectedDockerReference, mech, expectedFingerprints)
if err != nil {
return fmt.Errorf("Error verifying signature: %w", err)
}
fmt.Fprintf(stdout, "Signature verified using fingerprint %s, digest %s\n", verificationFingerprint, sig.DockerManifestDigest)
return nil
}
// WARNING: Do not use the contents of this for ANY security decisions,
// and be VERY CAREFUL about showing this information to humans in any way which suggest that these values “are probably” reliable.
// There is NO REASON to expect the values to be correct, or not intentionally misleading
// (including things like “✅ Verified by $authority”)
//
// The subcommand is undocumented, and it may be renamed or entirely disappear in the future.
type untrustedSignatureDumpOptions struct{}
func untrustedSignatureDumpCmd() *cobra.Command {
opts := untrustedSignatureDumpOptions{}
cmd := &cobra.Command{
Use: "untrusted-signature-dump-without-verification SIGNATURE",
Short: "Dump contents of a signature WITHOUT VERIFYING IT",
RunE: commandAction(opts.run),
Hidden: true,
}
adjustUsage(cmd)
return cmd
}
func (opts *untrustedSignatureDumpOptions) run(args []string, stdout io.Writer) error {
if len(args) != 1 {
return errors.New("Usage: skopeo untrusted-signature-dump-without-verification signature")
}
untrustedSignaturePath := args[0]
untrustedSignature, err := os.ReadFile(untrustedSignaturePath)
if err != nil {
return fmt.Errorf("Error reading untrusted signature from %s: %w", untrustedSignaturePath, err)
}
untrustedInfo, err := signature.GetUntrustedSignatureInformationWithoutVerifying(untrustedSignature)
if err != nil {
return fmt.Errorf("Error decoding untrusted signature: %v", err)
}
untrustedOut, err := json.MarshalIndent(untrustedInfo, "", " ")
if err != nil {
return err
}
fmt.Fprintln(stdout, string(untrustedOut))
return nil
}
================================================
FILE: cmd/skopeo/signing_test.go
================================================
package main
import (
"encoding/json"
"os"
"path/filepath"
"testing"
"time"
"github.com/opencontainers/go-digest"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"go.podman.io/image/v5/signature"
)
const (
// fixturesTestImageManifestDigest is the Docker manifest digest of "image.manifest.json"
fixturesTestImageManifestDigest = digest.Digest("sha256:20bf21ed457b390829cdbeec8795a7bea1626991fda603e0d01b4e7f60427e55")
// fixturesTestKeyFingerprint is the fingerprint of the private key.
fixturesTestKeyFingerprint = "08CD26E446E2E95249B7A405E932F44B23E8DD43"
// fixturesTestKeyFingerprint is the key ID of the private key.
fixturesTestKeyShortID = "E932F44B23E8DD43"
)
// Test that results of runSkopeo failed with nothing on stdout, and substring
// within the error message.
func assertTestFailed(t *testing.T, stdout string, err error, substring string) {
assert.ErrorContains(t, err, substring)
assert.Empty(t, stdout)
}
func TestStandaloneSign(t *testing.T) {
t.Setenv("GNUPGHOME", "fixtures")
mech, err := signature.NewGPGSigningMechanism()
require.NoError(t, err)
defer mech.Close()
if err := mech.SupportsSigning(); err != nil {
t.Skipf("Signing not supported: %v", err)
}
manifestPath := "fixtures/image.manifest.json"
dockerReference := "testing/manifest"
// Invalid command-line arguments
for _, args := range [][]string{
{},
{"a1", "a2"},
{"a1", "a2", "a3"},
{"a1", "a2", "a3", "a4"},
{"-o", "o", "a1", "a2"},
{"-o", "o", "a1", "a2", "a3", "a4"},
} {
out, err := runSkopeo(append([]string{"standalone-sign"}, args...)...)
assertTestFailed(t, out, err, "Usage")
}
// Error reading manifest
out, err := runSkopeo("standalone-sign", "-o", "/dev/null",
"/this/does/not/exist", dockerReference, fixturesTestKeyFingerprint)
assertTestFailed(t, out, err, "/this/does/not/exist")
// Invalid Docker reference
out, err = runSkopeo("standalone-sign", "-o", "/dev/null",
manifestPath, "" /* empty reference */, fixturesTestKeyFingerprint)
assertTestFailed(t, out, err, "empty signature content")
// Unknown key.
out, err = runSkopeo("standalone-sign", "-o", "/dev/null",
manifestPath, dockerReference, "UNKNOWN GPG FINGERPRINT")
assert.Error(t, err)
assert.Empty(t, out)
// Error writing output
out, err = runSkopeo("standalone-sign", "-o", "/dev/full",
manifestPath, dockerReference, fixturesTestKeyFingerprint)
assertTestFailed(t, out, err, "/dev/full")
// Success
sigOutput := filepath.Join(t.TempDir(), "sig")
out, err = runSkopeo("standalone-sign", "-o", sigOutput,
manifestPath, dockerReference, fixturesTestKeyFingerprint)
require.NoError(t, err)
assert.Empty(t, out)
sig, err := os.ReadFile(sigOutput)
require.NoError(t, err)
manifest, err := os.ReadFile(manifestPath)
require.NoError(t, err)
verified, err := signature.VerifyDockerManifestSignature(sig, manifest, dockerReference, mech, fixturesTestKeyFingerprint)
require.NoError(t, err)
assert.Equal(t, dockerReference, verified.DockerReference)
assert.Equal(t, fixturesTestImageManifestDigest, verified.DockerManifestDigest)
}
func TestStandaloneVerify(t *testing.T) {
manifestPath := "fixtures/image.manifest.json"
signaturePath := "fixtures/image.signature"
dockerReference := "testing/manifest"
t.Setenv("GNUPGHOME", "fixtures")
// Invalid command-line arguments
for _, args := range [][]string{
{},
{"a1", "a2", "a3"},
{"a1", "a2", "a3", "a4", "a5"},
} {
out, err := runSkopeo(append([]string{"standalone-verify"}, args...)...)
assertTestFailed(t, out, err, "Usage")
}
// Error reading manifest
out, err := runSkopeo("standalone-verify", "/this/does/not/exist",
dockerReference, fixturesTestKeyFingerprint, signaturePath)
assertTestFailed(t, out, err, "/this/does/not/exist")
// Error reading signature
out, err = runSkopeo("standalone-verify", manifestPath,
dockerReference, fixturesTestKeyFingerprint, "/this/does/not/exist")
assertTestFailed(t, out, err, "/this/does/not/exist")
// Error verifying signature
out, err = runSkopeo("standalone-verify", manifestPath,
dockerReference, fixturesTestKeyFingerprint, "fixtures/corrupt.signature")
assertTestFailed(t, out, err, "Error verifying signature")
// Error using any without a public key file
out, err = runSkopeo("standalone-verify", manifestPath,
dockerReference, "any", signaturePath)
assertTestFailed(t, out, err, "Cannot use any fingerprint without a public key file")
// Success
out, err = runSkopeo("standalone-verify", manifestPath,
dockerReference, fixturesTestKeyFingerprint, signaturePath)
assert.NoError(t, err)
assert.Equal(t, "Signature verified using fingerprint "+fixturesTestKeyFingerprint+", digest "+fixturesTestImageManifestDigest.String()+"\n", out)
// Using multiple fingerprints
out, err = runSkopeo("standalone-verify", manifestPath,
dockerReference, "0123456789ABCDEF0123456789ABCDEF01234567,"+fixturesTestKeyFingerprint+",DEADBEEFDEADBEEFDEADBEEFDEADBEEFDEADBEEF", signaturePath)
assert.NoError(t, err)
assert.Equal(t, "Signature verified using fingerprint "+fixturesTestKeyFingerprint+", digest "+fixturesTestImageManifestDigest.String()+"\n", out)
// Using a public key file
t.Setenv("GNUPGHOME", "")
out, err = runSkopeo("standalone-verify", "--public-key-file", "fixtures/pubring.gpg", manifestPath,
dockerReference, fixturesTestKeyFingerprint, signaturePath)
assert.NoError(t, err)
assert.Equal(t, "Signature verified using fingerprint "+fixturesTestKeyFingerprint+", digest "+fixturesTestImageManifestDigest.String()+"\n", out)
// Using a public key file matching any public key
t.Setenv("GNUPGHOME", "")
out, err = runSkopeo("standalone-verify", "--public-key-file", "fixtures/pubring.gpg", manifestPath,
dockerReference, "any", signaturePath)
assert.NoError(t, err)
assert.Equal(t, "Signature verified using fingerprint "+fixturesTestKeyFingerprint+", digest "+fixturesTestImageManifestDigest.String()+"\n", out)
}
func TestUntrustedSignatureDump(t *testing.T) {
// Invalid command-line arguments
for _, args := range [][]string{
{},
{"a1", "a2"},
{"a1", "a2", "a3", "a4"},
} {
out, err := runSkopeo(append([]string{"untrusted-signature-dump-without-verification"}, args...)...)
assertTestFailed(t, out, err, "Usage")
}
// Error reading manifest
out, err := runSkopeo("untrusted-signature-dump-without-verification",
"/this/does/not/exist")
assertTestFailed(t, out, err, "/this/does/not/exist")
// Error reading signature (input is not a signature)
out, err = runSkopeo("untrusted-signature-dump-without-verification", "fixtures/image.manifest.json")
assertTestFailed(t, out, err, "Error decoding untrusted signature")
// Success
for _, path := range []string{"fixtures/image.signature", "fixtures/corrupt.signature"} {
// Success
out, err = runSkopeo("untrusted-signature-dump-without-verification", path)
require.NoError(t, err)
var info signature.UntrustedSignatureInformation
err := json.Unmarshal([]byte(out), &info)
require.NoError(t, err)
assert.Equal(t, fixturesTestImageManifestDigest, info.UntrustedDockerManifestDigest)
assert.Equal(t, "testing/manifest", info.UntrustedDockerReference)
assert.NotNil(t, info.UntrustedCreatorID)
assert.Equal(t, "atomic ", *info.UntrustedCreatorID)
assert.NotNil(t, info.UntrustedTimestamp)
assert.True(t, time.Unix(1458239713, 0).Equal(*info.UntrustedTimestamp))
assert.Equal(t, fixturesTestKeyShortID, info.UntrustedShortKeyIdentifier)
}
}
================================================
FILE: cmd/skopeo/sync.go
================================================
package main
import (
"context"
"errors"
"fmt"
"io"
"io/fs"
"os"
"path"
"path/filepath"
"regexp"
"slices"
"strings"
"github.com/Masterminds/semver/v3"
"github.com/opencontainers/go-digest"
"github.com/sirupsen/logrus"
"github.com/spf13/cobra"
"go.podman.io/common/pkg/retry"
"go.podman.io/image/v5/copy"
"go.podman.io/image/v5/directory"
"go.podman.io/image/v5/docker"
"go.podman.io/image/v5/docker/reference"
"go.podman.io/image/v5/manifest"
"go.podman.io/image/v5/transports"
"go.podman.io/image/v5/types"
"gopkg.in/yaml.v3"
)
// syncOptions contains information retrieved from the skopeo sync command line.
type syncOptions struct {
global *globalOptions // Global (not command dependent) skopeo options
deprecatedTLSVerify *deprecatedTLSVerifyOption
srcImage *imageOptions // Source image options
destImage *imageDestOptions // Destination image options
retryOpts *retry.Options
copy *sharedCopyOptions
source string // Source repository name
destination string // Destination registry name
digestFile string // Write digest to this file
scoped bool // When true, namespace copied images at destination using the source repository name
all bool // Copy all of the images if an image in the source is a list
dryRun bool // Don't actually copy anything, just output what it would have done
keepGoing bool // Whether or not to abort the sync if there are any errors during syncing the images
appendSuffix string // Suffix to append to destination image tag
}
// repoDescriptor contains information of a single repository used as a sync source.
type repoDescriptor struct {
DirBasePath string // base path when source is 'dir'
ImageRefs []types.ImageReference // List of tagged image found for the repository
Context *types.SystemContext // SystemContext for the sync command
}
// tlsVerifyConfig is an implementation of the Unmarshaler interface, used to
// customize the unmarshaling behaviour of the tls-verify YAML key.
type tlsVerifyConfig struct {
skip types.OptionalBool // skip TLS verification check (false by default)
}
// registrySyncConfig contains information about a single registry, read from
// the source YAML file
type registrySyncConfig struct {
Images map[string][]string // Images map images name to slices with the images' references (tags, digests)
ImagesByTagRegex map[string]string `yaml:"images-by-tag-regex"` // Images map images name to regular expression with the images' tags
ImagesBySemver map[string]string `yaml:"images-by-semver"` // ImagesBySemver maps a repository to a semver constraint (e.g. '>=3.14') to match images' tags to
Credentials types.DockerAuthConfig // Username and password used to authenticate with the registry
TLSVerify tlsVerifyConfig `yaml:"tls-verify"` // TLS verification mode (enabled by default)
CertDir string `yaml:"cert-dir"` // Path to the TLS certificates of the registry
}
// sourceConfig contains all registries information read from the source YAML file
type sourceConfig map[string]registrySyncConfig
func syncCmd(global *globalOptions) *cobra.Command {
sharedFlags, sharedOpts := sharedImageFlags()
deprecatedTLSVerifyFlags, deprecatedTLSVerifyOpt := deprecatedTLSVerifyFlags()
srcFlags, srcOpts := dockerImageFlags(global, sharedOpts, deprecatedTLSVerifyOpt, "src-", "screds")
destFlags, destOpts := dockerImageFlags(global, sharedOpts, deprecatedTLSVerifyOpt, "dest-", "dcreds")
retryFlags, retryOpts := retryFlags()
copyFlags, copyOpts := sharedCopyFlags()
opts := syncOptions{
global: global,
deprecatedTLSVerify: deprecatedTLSVerifyOpt,
srcImage: srcOpts,
destImage: &imageDestOptions{imageOptions: destOpts},
retryOpts: retryOpts,
copy: copyOpts,
}
cmd := &cobra.Command{
Use: "sync [command options] --src TRANSPORT --dest TRANSPORT SOURCE DESTINATION",
Short: "Synchronize one or more images from one location to another",
Long: `Copy all the images from a SOURCE to a DESTINATION.
Allowed SOURCE transports (specified with --src): docker, dir, yaml.
Allowed DESTINATION transports (specified with --dest): docker, dir.
See skopeo-sync(1) for details.
`,
RunE: commandAction(opts.run),
Example: `skopeo sync --src docker --dest dir --scoped registry.example.com/busybox /media/usb`,
}
adjustUsage(cmd)
flags := cmd.Flags()
flags.AddFlagSet(&sharedFlags)
flags.AddFlagSet(&deprecatedTLSVerifyFlags)
flags.AddFlagSet(&srcFlags)
flags.AddFlagSet(&destFlags)
flags.AddFlagSet(&retryFlags)
flags.AddFlagSet(©Flags)
flags.StringVarP(&opts.source, "src", "s", "", "SOURCE transport type")
flags.StringVarP(&opts.destination, "dest", "d", "", "DESTINATION transport type")
flags.BoolVar(&opts.scoped, "scoped", false, "Images at DESTINATION are prefix using the full source image path as scope")
flags.StringVar(&opts.appendSuffix, "append-suffix", "", "String to append to DESTINATION tags")
flags.StringVar(&opts.digestFile, "digestfile", "", "Write the digests and Image References of the resulting images to the specified file, separated by newlines")
flags.BoolVarP(&opts.all, "all", "a", false, "Copy all images if SOURCE-IMAGE is a list")
flags.BoolVar(&opts.dryRun, "dry-run", false, "Run without actually copying data")
flags.BoolVarP(&opts.keepGoing, "keep-going", "", false, "Do not abort the sync if any image copy fails")
return cmd
}
// UnmarshalYAML is the implementation of the Unmarshaler interface method
// for the tlsVerifyConfig type.
// It unmarshals the 'tls-verify' YAML key so that, when they key is not
// specified, tls verification is enforced.
func (tls *tlsVerifyConfig) UnmarshalYAML(value *yaml.Node) error {
var verify bool
if err := value.Decode(&verify); err != nil {
return err
}
tls.skip = types.NewOptionalBool(!verify)
return nil
}
// newSourceConfig unmarshals the provided YAML file path to the sourceConfig type.
// It returns a new unmarshaled sourceConfig object and any error encountered.
func newSourceConfig(yamlFile string) (sourceConfig, error) {
var cfg sourceConfig
source, err := os.ReadFile(yamlFile)
if err != nil {
return cfg, err
}
err = yaml.Unmarshal(source, &cfg)
if err != nil {
return cfg, fmt.Errorf("Failed to unmarshal %q: %w", yamlFile, err)
}
return cfg, nil
}
// parseRepositoryReference parses input into a reference.Named, and verifies that it names a repository, not an image.
func parseRepositoryReference(input string) (reference.Named, error) {
ref, err := reference.ParseNormalizedNamed(input)
if err != nil {
return nil, err
}
if !reference.IsNameOnly(ref) {
return nil, errors.New("input names a reference, not a repository")
}
return ref, nil
}
// destinationReference creates an image reference using the provided transport.
// It returns a image reference to be used as destination of an image copy and
// any error encountered.
func destinationReference(destination string, transport string) (types.ImageReference, error) {
var imageTransport types.ImageTransport
switch transport {
case docker.Transport.Name():
destination = fmt.Sprintf("//%s", destination)
imageTransport = docker.Transport
case directory.Transport.Name():
_, err := os.Stat(destination)
if err == nil {
return nil, fmt.Errorf("Refusing to overwrite destination directory %q", destination)
}
if !os.IsNotExist(err) {
return nil, fmt.Errorf("Destination directory could not be used: %w", err)
}
// the directory holding the image must be created here
if err = os.MkdirAll(destination, 0o755); err != nil {
return nil, fmt.Errorf("Error creating directory for image %s: %w", destination, err)
}
imageTransport = directory.Transport
default:
return nil, fmt.Errorf("%q is not a valid destination transport", transport)
}
logrus.Debugf("Destination for transport %q: %s", transport, destination)
destRef, err := imageTransport.ParseReference(destination)
if err != nil {
return nil, fmt.Errorf("Cannot obtain a valid image reference for transport %q and reference %q: %w", imageTransport.Name(), destination, err)
}
return destRef, nil
}
// getImageTags lists all tags in a repository.
// It returns a string slice of tags and any error encountered.
func getImageTags(ctx context.Context, sysCtx *types.SystemContext, repoRef reference.Named) ([]string, error) {
name := repoRef.Name()
logrus.WithFields(logrus.Fields{
"image": name,
}).Info("Getting tags")
// Ugly: NewReference rejects IsNameOnly references, and GetRepositoryTags ignores the tag/digest.
// So, we use TagNameOnly here only to shut up NewReference
dockerRef, err := docker.NewReference(reference.TagNameOnly(repoRef))
if err != nil {
return nil, err // Should never happen for a reference with tag and no digest
}
tags, err := docker.GetRepositoryTags(ctx, sysCtx, dockerRef)
if err != nil {
return nil, fmt.Errorf("Error determining repository tags for repo %s: %w", name, err)
}
return tags, nil
}
// imagesToCopyFromRepo builds a list of image references from the tags
// found in a source repository.
// It returns an image reference slice with as many elements as the tags found
// and any error encountered.
func imagesToCopyFromRepo(sys *types.SystemContext, repoRef reference.Named) ([]types.ImageReference, error) {
tags, err := getImageTags(context.Background(), sys, repoRef)
if err != nil {
return nil, err
}
var sourceReferences []types.ImageReference
for _, tag := range tags {
taggedRef, err := reference.WithTag(repoRef, tag)
if err != nil {
logrus.WithFields(logrus.Fields{
"repo": repoRef.Name(),
"tag": tag,
}).Errorf("Error creating a tagged reference from registry tag list: %v", err)
continue
}
ref, err := docker.NewReference(taggedRef)
if err != nil {
return nil, fmt.Errorf("Cannot obtain a valid image reference for transport %q and reference %s: %w", docker.Transport.Name(), taggedRef.String(), err)
}
sourceReferences = append(sourceReferences, ref)
}
return sourceReferences, nil
}
// imagesToCopyFromDir builds a list of image references from the images found
// in the source directory.
// It returns an image reference slice with as many elements as the images found
// and any error encountered.
func imagesToCopyFromDir(dirPath string) ([]types.ImageReference, error) {
var sourceReferences []types.ImageReference
err := filepath.WalkDir(dirPath, func(path string, d fs.DirEntry, err error) error {
if err != nil {
return err
}
if !d.IsDir() && d.Name() == "manifest.json" {
dirname := filepath.Dir(path)
ref, err := directory.Transport.ParseReference(dirname)
if err != nil {
return fmt.Errorf("Cannot obtain a valid image reference for transport %q and reference %q: %w", directory.Transport.Name(), dirname, err)
}
sourceReferences = append(sourceReferences, ref)
return filepath.SkipDir
}
return nil
})
if err != nil {
return sourceReferences,
fmt.Errorf("Error walking the path %q: %w", dirPath, err)
}
return sourceReferences, nil
}
// imagesToCopyFromRegistry builds a list of repository descriptors from the images
// in a registry configuration.
// It returns a repository descriptors slice with as many elements as the images
// found and any error encountered. Each element of the slice is a list of
// image references, to be used as sync source.
func imagesToCopyFromRegistry(registryName string, cfg registrySyncConfig, sourceCtx types.SystemContext) ([]repoDescriptor, error) {
serverCtx := &sourceCtx
// override ctx with per-registryName options
serverCtx.DockerCertPath = cfg.CertDir
serverCtx.DockerDaemonCertPath = cfg.CertDir
// Only override TLS verification if explicitly specified in YAML; otherwise, keep CLI/global settings.
if cfg.TLSVerify.skip != types.OptionalBoolUndefined {
serverCtx.DockerDaemonInsecureSkipTLSVerify = (cfg.TLSVerify.skip == types.OptionalBoolTrue)
serverCtx.DockerInsecureSkipTLSVerify = cfg.TLSVerify.skip
}
if cfg.Credentials != (types.DockerAuthConfig{}) {
serverCtx.DockerAuthConfig = &cfg.Credentials
}
var repoDescList []repoDescriptor
if len(cfg.Images) == 0 && len(cfg.ImagesByTagRegex) == 0 && len(cfg.ImagesBySemver) == 0 {
logrus.WithFields(logrus.Fields{
"registry": registryName,
}).Warn("No images specified for registry")
return repoDescList, nil
}
for imageName, refs := range cfg.Images {
repoLogger := logrus.WithFields(logrus.Fields{
"repo": imageName,
"registry": registryName,
})
repoRef, err := parseRepositoryReference(fmt.Sprintf("%s/%s", registryName, imageName))
if err != nil {
repoLogger.Error("Error parsing repository name, skipping")
logrus.Error(err)
continue
}
repoLogger.Info("Processing repo")
var sourceReferences []types.ImageReference
if len(refs) != 0 {
for _, ref := range refs {
tagLogger := logrus.WithFields(logrus.Fields{"ref": ref})
var named reference.Named
// first try as digest
if d, err := digest.Parse(ref); err == nil {
named, err = reference.WithDigest(repoRef, d)
if err != nil {
tagLogger.Error("Error processing ref, skipping")
logrus.Error(err)
continue
}
} else {
tagLogger.Debugf("Ref was not a digest, trying as a tag: %s", err)
named, err = reference.WithTag(repoRef, ref)
if err != nil {
tagLogger.Error("Error parsing ref, skipping")
logrus.Error(err)
continue
}
}
imageRef, err := docker.NewReference(named)
if err != nil {
tagLogger.Error("Error processing ref, skipping")
logrus.Errorf("Error getting image reference: %s", err)
continue
}
sourceReferences = append(sourceReferences, imageRef)
}
} else { // len(refs) == 0
repoLogger.Info("Querying registry for image tags")
sourceReferences, err = imagesToCopyFromRepo(serverCtx, repoRef)
if err != nil {
repoLogger.Error("Error processing repo, skipping")
logrus.Error(err)
continue
}
}
if len(sourceReferences) == 0 {
repoLogger.Warnf("No refs to sync found")
continue
}
repoDescList = append(repoDescList, repoDescriptor{
ImageRefs: sourceReferences,
Context: serverCtx,
})
}
// include repository descriptors for cfg.ImagesByTagRegex
{
filterCollection, err := tagRegexFilterCollection(cfg.ImagesByTagRegex)
if err != nil {
logrus.Error(err)
} else {
additionalRepoDescList := filterSourceReferences(serverCtx, registryName, filterCollection)
repoDescList = append(repoDescList, additionalRepoDescList...)
}
}
// include repository descriptors for cfg.ImagesBySemver
{
filterCollection, err := semverFilterCollection(cfg.ImagesBySemver)
if err != nil {
logrus.Error(err)
} else {
additionalRepoDescList := filterSourceReferences(serverCtx, registryName, filterCollection)
repoDescList = append(repoDescList, additionalRepoDescList...)
}
}
return repoDescList, nil
}
// filterFunc is a function used to limit the initial set of image references
// using tags, patterns, semver, etc.
type filterFunc func(*logrus.Entry, types.ImageReference) bool
// filterCollection is a map of repository names to filter functions.
type filterCollection map[string]filterFunc
// filterSourceReferences lists tags for images specified in the collection and
// filters them using assigned filter functions.
// It returns a list of repoDescriptors.
func filterSourceReferences(sys *types.SystemContext, registryName string, collection filterCollection) []repoDescriptor {
var repoDescList []repoDescriptor
for repoName, filter := range collection {
logger := logrus.WithFields(logrus.Fields{
"repo": repoName,
"registry": registryName,
})
repoRef, err := parseRepositoryReference(fmt.Sprintf("%s/%s", registryName, repoName))
if err != nil {
logger.Error("Error parsing repository name, skipping")
logrus.Error(err)
continue
}
logger.Info("Processing repo")
var sourceReferences []types.ImageReference
logger.Info("Querying registry for image tags")
sourceReferences, err = imagesToCopyFromRepo(sys, repoRef)
if err != nil {
logger.Error("Error processing repo, skipping")
logrus.Error(err)
continue
}
var filteredSourceReferences []types.ImageReference
for _, ref := range sourceReferences {
if filter(logger, ref) {
filteredSourceReferences = append(filteredSourceReferences, ref)
}
}
if len(filteredSourceReferences) == 0 {
logger.Warnf("No refs to sync found")
continue
}
repoDescList = append(repoDescList, repoDescriptor{
ImageRefs: filteredSourceReferences,
Context: sys,
})
}
return repoDescList
}
// tagRegexFilterCollection converts a map of (repository name, tag regex) pairs
// into a filterCollection, which is a map of (repository name, filter function)
// pairs.
func tagRegexFilterCollection(collection map[string]string) (filterCollection, error) {
filters := filterCollection{}
for repoName, tagRegex := range collection {
pattern, err := regexp.Compile(tagRegex)
if err != nil {
return nil, err
}
f := func(logger *logrus.Entry, sourceReference types.ImageReference) bool {
tagged, isTagged := sourceReference.DockerReference().(reference.Tagged)
if !isTagged {
logger.Errorf("Internal error, reference %s does not have a tag, skipping", sourceReference.DockerReference())
return false
}
return pattern.MatchString(tagged.Tag())
}
filters[repoName] = f
}
return filters, nil
}
// semverFilterCollection converts a map of (repository name, array of semver constraints) pairs
// into a filterCollection, which is a map of (repository name, filter function)
// pairs.
func semverFilterCollection(collection map[string]string) (filterCollection, error) {
filters := filterCollection{}
for repoName, constraintString := range collection {
constraint, err := semver.NewConstraint(constraintString)
if err != nil {
return nil, err
}
f := func(logger *logrus.Entry, sourceReference types.ImageReference) bool {
tagged, isTagged := sourceReference.DockerReference().(reference.Tagged)
if !isTagged {
logger.Errorf("Internal error, reference %s does not have a tag, skipping", sourceReference.DockerReference())
return false
}
tagVersion, err := semver.NewVersion(tagged.Tag())
if err != nil {
logger.Tracef("Tag %q cannot be parsed as semver, skipping", tagged.Tag())
return false
}
return constraint.Check(tagVersion)
}
filters[repoName] = f
}
return filters, nil
}
// imagesToCopy retrieves all the images to copy from a specified sync source
// and transport.
// It returns a slice of repository descriptors, where each descriptor is a
// list of tagged image references to be used as sync source, and any error
// encountered.
func imagesToCopy(source string, transport string, sourceCtx *types.SystemContext) ([]repoDescriptor, error) {
var descriptors []repoDescriptor
switch transport {
case docker.Transport.Name():
desc := repoDescriptor{
Context: sourceCtx,
}
named, err := reference.ParseNormalizedNamed(source) // May be a repository or an image.
if err != nil {
return nil, fmt.Errorf("Cannot obtain a valid image reference for transport %q and reference %q: %w", docker.Transport.Name(), source, err)
}
imageTagged := !reference.IsNameOnly(named)
logrus.WithFields(logrus.Fields{
"imagename": source,
"tagged": imageTagged,
}).Info("Tag presence check")
if imageTagged {
srcRef, err := docker.NewReference(named)
if err != nil {
return nil, fmt.Errorf("Cannot obtain a valid image reference for transport %q and reference %q: %w", docker.Transport.Name(), named.String(), err)
}
desc.ImageRefs = []types.ImageReference{srcRef}
} else {
desc.ImageRefs, err = imagesToCopyFromRepo(sourceCtx, named)
if err != nil {
return descriptors, err
}
if len(desc.ImageRefs) == 0 {
return descriptors, fmt.Errorf("No images to sync found in %q", source)
}
}
descriptors = append(descriptors, desc)
case directory.Transport.Name():
desc := repoDescriptor{
Context: sourceCtx,
}
if _, err := os.Stat(source); err != nil {
return descriptors, fmt.Errorf("Invalid source directory specified: %w", err)
}
desc.DirBasePath = source
var err error
desc.ImageRefs, err = imagesToCopyFromDir(source)
if err != nil {
return descriptors, err
}
if len(desc.ImageRefs) == 0 {
return descriptors, fmt.Errorf("No images to sync found in %q", source)
}
descriptors = append(descriptors, desc)
case "yaml":
cfg, err := newSourceConfig(source)
if err != nil {
return descriptors, err
}
for registryName, registryConfig := range cfg {
descs, err := imagesToCopyFromRegistry(registryName, registryConfig, *sourceCtx)
if err != nil {
return descriptors, fmt.Errorf("Failed to retrieve list of images from registry %q: %w", registryName, err)
}
descriptors = append(descriptors, descs...)
}
}
return descriptors, nil
}
func (opts *syncOptions) run(args []string, stdout io.Writer) (retErr error) {
if len(args) != 2 {
return errorShouldDisplayUsage{errors.New("Exactly two arguments expected")}
}
opts.deprecatedTLSVerify.warnIfUsed([]string{"--src-tls-verify", "--dest-tls-verify"})
policyContext, err := opts.global.getPolicyContext()
if err != nil {
return fmt.Errorf("Error loading trust policy: %w", err)
}
defer func() {
if err := policyContext.Destroy(); err != nil {
retErr = noteCloseFailure(retErr, "tearing down policy context", err)
}
}()
// validate source and destination options
if len(opts.source) == 0 {
return errors.New("A source transport must be specified")
}
if !slices.Contains([]string{docker.Transport.Name(), directory.Transport.Name(), "yaml"}, opts.source) {
return fmt.Errorf("%q is not a valid source transport", opts.source)
}
if len(opts.destination) == 0 {
return errors.New("A destination transport must be specified")
}
if !slices.Contains([]string{docker.Transport.Name(), directory.Transport.Name()}, opts.destination) {
return fmt.Errorf("%q is not a valid destination transport", opts.destination)
}
if opts.source == opts.destination && opts.source == directory.Transport.Name() {
return errors.New("sync from 'dir' to 'dir' not implemented, consider using rsync instead")
}
opts.destImage.warnAboutIneffectiveOptions(transports.Get(opts.destination))
imageListSelection := copy.CopySystemImage
if opts.all {
imageListSelection = copy.CopyAllImages
}
sourceCtx, err := opts.srcImage.newSystemContext()
if err != nil {
return err
}
ctx, cancel := opts.global.commandTimeoutContext()
defer cancel()
sourceArg := args[0]
var srcRepoList []repoDescriptor
if err = retry.IfNecessary(ctx, func() error {
srcRepoList, err = imagesToCopy(sourceArg, opts.source, sourceCtx)
return err
}, opts.retryOpts); err != nil {
return err
}
destination := args[1]
destinationCtx, err := opts.destImage.newSystemContext()
if err != nil {
return err
}
options, cleanupOptions, err := opts.copy.copyOptions(stdout)
if err != nil {
return err
}
defer cleanupOptions()
options.DestinationCtx = destinationCtx
options.ImageListSelection = imageListSelection
options.OptimizeDestinationImageAlreadyExists = true
errorsPresent := false
imagesNumber := 0
if opts.dryRun {
logrus.Warn("Running in dry-run mode")
}
var digestFile *os.File
if opts.digestFile != "" && !opts.dryRun {
digestFile, err = os.OpenFile(opts.digestFile, os.O_TRUNC|os.O_CREATE|os.O_WRONLY, 0o644)
if err != nil {
return fmt.Errorf("Error creating digest file: %w", err)
}
defer func() {
if err := digestFile.Close(); err != nil {
retErr = noteCloseFailure(retErr, "closing digest file", err)
}
}()
}
for _, srcRepo := range srcRepoList {
options.SourceCtx = srcRepo.Context
for counter, ref := range srcRepo.ImageRefs {
var destSuffix string
var manifestBytes []byte
switch ref.Transport() {
case docker.Transport:
// docker -> dir or docker -> docker
destSuffix = ref.DockerReference().String()
case directory.Transport:
// dir -> docker (we don't allow `dir` -> `dir` sync operations)
destSuffix = strings.TrimPrefix(ref.StringWithinTransport(), srcRepo.DirBasePath)
if destSuffix == "" {
// if source is a full path to an image, have destPath scoped to repo:tag
destSuffix = path.Base(srcRepo.DirBasePath)
}
}
if !opts.scoped {
destSuffix = path.Base(destSuffix)
}
destRef, err := destinationReference(path.Join(destination, destSuffix)+opts.appendSuffix, opts.destination)
if err != nil {
return err
}
fromToFields := logrus.Fields{
"from": transports.ImageName(ref),
"to": transports.ImageName(destRef),
}
if opts.dryRun {
logrus.WithFields(fromToFields).Infof("Would have copied image ref %d/%d", counter+1, len(srcRepo.ImageRefs))
} else {
logrus.WithFields(fromToFields).Infof("Copying image ref %d/%d", counter+1, len(srcRepo.ImageRefs))
if err = retry.IfNecessary(ctx, func() error {
manifestBytes, err = copy.Image(ctx, policyContext, destRef, ref, options)
return err
}, opts.retryOpts); err != nil {
if !opts.keepGoing {
return fmt.Errorf("Error copying ref %q: %w", transports.ImageName(ref), err)
}
// log the error, keep a note that there was a failure and move on to the next
// image ref
errorsPresent = true
logrus.WithError(err).Errorf("Error copying ref %q", transports.ImageName(ref))
continue
}
// Ensure that we log the manifest digest to a file only if the copy operation was successful
if opts.digestFile != "" {
manifestDigest, err := manifest.Digest(manifestBytes)
if err != nil {
return err
}
outputStr := fmt.Sprintf("%s %s", manifestDigest.String(), transports.ImageName(destRef))
if _, err = digestFile.WriteString(outputStr + "\n"); err != nil {
return fmt.Errorf("Failed to write digest to file %q: %w", opts.digestFile, err)
}
}
}
imagesNumber++
}
}
if opts.dryRun {
logrus.Infof("Would have synced %d images from %d sources", imagesNumber, len(srcRepoList))
} else {
logrus.Infof("Synced %d images from %d sources", imagesNumber, len(srcRepoList))
}
if !errorsPresent {
return nil
}
return errors.New("Sync failed due to previous reported error(s) for one or more images")
}
================================================
FILE: cmd/skopeo/sync_test.go
================================================
package main
import (
"fmt"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"go.podman.io/image/v5/types"
"gopkg.in/yaml.v3"
)
var _ yaml.Unmarshaler = (*tlsVerifyConfig)(nil)
func TestTLSVerifyConfig(t *testing.T) {
type container struct { // An example of a larger config file
TLSVerify tlsVerifyConfig `yaml:"tls-verify"`
}
for _, c := range []struct {
input string
expected tlsVerifyConfig
}{
{
input: `tls-verify: true`,
expected: tlsVerifyConfig{skip: types.OptionalBoolFalse},
},
{
input: `tls-verify: false`,
expected: tlsVerifyConfig{skip: types.OptionalBoolTrue},
},
{
input: ``, // No value
expected: tlsVerifyConfig{skip: types.OptionalBoolUndefined},
},
} {
config := container{}
err := yaml.Unmarshal([]byte(c.input), &config)
require.NoError(t, err, c.input)
assert.Equal(t, c.expected, config.TLSVerify, c.input)
}
// Invalid input
config := container{}
err := yaml.Unmarshal([]byte(`tls-verify: "not a valid bool"`), &config)
assert.Error(t, err)
}
func TestSync(t *testing.T) {
// Invalid command-line arguments
for _, args := range [][]string{
{},
{"a1"},
{"a1", "a2", "a3"},
} {
out, err := runSkopeo(append([]string{"sync"}, args...)...)
assertTestFailed(t, out, err, "Exactly two arguments expected")
}
// FIXME: Much more test coverage
// Actual feature tests exist in integration and systemtest
}
// TestSyncTLSPrecedence validates the interactions of tls-verify in YAML and --src-tls-verify in the CLI.
func TestSyncTLSPrecedence(t *testing.T) {
for _, tt := range []struct {
cli string
yaml string
wantSkip types.OptionalBool
wantDaemonSkip bool
}{
{"--src-tls-verify=false", `# nothing`, types.OptionalBoolTrue, true},
{"--src-tls-verify=true", `# nothing`, types.OptionalBoolFalse, false},
{"", `# nothing`, types.OptionalBoolUndefined, false},
{"--src-tls-verify=false", "tls-verify: true", types.OptionalBoolFalse, false},
{"--src-tls-verify=true", "tls-verify: false", types.OptionalBoolTrue, true},
} {
t.Run(fmt.Sprintf("%#v + %q", tt.cli, tt.yaml), func(t *testing.T) {
opts := fakeImageOptions(t, "src-", true, []string{}, []string{tt.cli})
sourceCtx, err := opts.newSystemContext()
require.NoError(t, err)
var cfg registrySyncConfig
err = yaml.Unmarshal(fmt.Appendf(nil, `
%s
images:
repo: # Specifying an explicit repo+tag avoids imagesToCopyFromRegistry trying to contact the registry.
- latest
`, tt.yaml,
), &cfg)
require.NoError(t, err)
descs, err := imagesToCopyFromRegistry("example.com", cfg, *sourceCtx)
require.NoError(t, err)
require.NotEmpty(t, descs)
ctx := descs[0].Context
require.NotNil(t, ctx)
assert.Equal(t, tt.wantSkip, ctx.DockerInsecureSkipTLSVerify)
assert.Equal(t, tt.wantDaemonSkip, ctx.DockerDaemonInsecureSkipTLSVerify)
})
}
}
================================================
FILE: cmd/skopeo/unshare.go
================================================
//go:build !linux
package main
func reexecIfNecessaryForImages(_ ...string) error {
return nil
}
================================================
FILE: cmd/skopeo/unshare_linux.go
================================================
package main
import (
"fmt"
"slices"
"github.com/moby/sys/capability"
"go.podman.io/image/v5/transports/alltransports"
"go.podman.io/storage/pkg/unshare"
)
var neededCapabilities = []capability.Cap{
capability.CAP_CHOWN,
capability.CAP_DAC_OVERRIDE,
capability.CAP_FOWNER,
capability.CAP_FSETID,
capability.CAP_MKNOD,
capability.CAP_SETFCAP,
capability.CAP_SYS_ADMIN,
}
func maybeReexec() error {
// With Skopeo we need only the subset of the root capabilities necessary
// for pulling an image to the storage. Do not attempt to create a namespace
// if we already have the capabilities we need.
capabilities, err := capability.NewPid2(0)
if err != nil {
return fmt.Errorf("error reading the current capabilities sets: %w", err)
}
if err := capabilities.Load(); err != nil {
return fmt.Errorf("error loading the current capabilities sets: %w", err)
}
if slices.ContainsFunc(neededCapabilities, func(cap capability.Cap) bool {
return !capabilities.Get(capability.EFFECTIVE, cap)
}) {
// We miss a capability we need, create a user namespaces
unshare.MaybeReexecUsingUserNamespace(true)
return nil
}
return nil
}
func reexecIfNecessaryForImages(imageNames ...string) error {
// Check if container-storage is used before doing unshare
if slices.ContainsFunc(imageNames, func(imageName string) bool {
transport := alltransports.TransportFromImageName(imageName)
// Hard-code the storage name to avoid a reference on c/image/storage.
// See https://github.com/containers/skopeo/issues/771#issuecomment-563125006.
return transport != nil && transport.Name() == "containers-storage"
}) {
return maybeReexec()
}
return nil
}
================================================
FILE: cmd/skopeo/utils.go
================================================
package main
import (
"context"
"errors"
"fmt"
"io"
"os"
"strings"
"time"
dockerdistributionerrcode "github.com/docker/distribution/registry/api/errcode"
dockerdistributionapi "github.com/docker/distribution/registry/api/v2"
imgspecv1 "github.com/opencontainers/image-spec/specs-go/v1"
"github.com/sirupsen/logrus"
"github.com/spf13/cobra"
"github.com/spf13/pflag"
commonFlag "go.podman.io/common/pkg/flag"
"go.podman.io/common/pkg/retry"
"go.podman.io/image/v5/copy"
"go.podman.io/image/v5/directory"
"go.podman.io/image/v5/manifest"
ociarchive "go.podman.io/image/v5/oci/archive"
ocilayout "go.podman.io/image/v5/oci/layout"
"go.podman.io/image/v5/pkg/cli"
"go.podman.io/image/v5/pkg/cli/sigstore"
"go.podman.io/image/v5/pkg/compression"
"go.podman.io/image/v5/signature/signer"
"go.podman.io/image/v5/signature/simplesequoia"
"go.podman.io/image/v5/storage"
"go.podman.io/image/v5/transports/alltransports"
"go.podman.io/image/v5/types"
"golang.org/x/term"
)
// errorShouldDisplayUsage is a subtype of error used by command handlers to indicate that the command’s help should be included.
type errorShouldDisplayUsage struct {
error
}
// noteCloseFailure returns (possibly-nil) err modified to account for (non-nil) closeErr.
// The error for closeErr is annotated with description (which is not a format string)
// Typical usage:
//
// defer func() {
// if err := something.Close(); err != nil {
// returnedErr = noteCloseFailure(returnedErr, "closing something", err)
// }
// }
func noteCloseFailure(err error, description string, closeErr error) error {
// We don’t accept a Closer() and close it ourselves because signature.PolicyContext has .Destroy(), not .Close().
// This also makes it harder for a caller to do
// defer noteCloseFailure(returnedErr, …)
// which doesn’t use the right value of returnedErr, and doesn’t update it.
if err == nil {
return fmt.Errorf("%s: %w", description, closeErr)
}
// In this case we prioritize the primary error for use with %w; closeErr is usually less relevant, or might be a consequence of the primary error.
return fmt.Errorf("%w (%s: %v)", err, description, closeErr)
}
// commandAction intermediates between the RunE interface and the real handler,
// primarily to ensure that cobra.Command is not available to the handler, which in turn
// makes sure that the cmd.Flags() etc. flag access functions are not used,
// and everything is done using the *Options structures and the *Var() methods of cmd.Flag().
// handler may return errorShouldDisplayUsage to cause c.Help to be called.
func commandAction(handler func(args []string, stdout io.Writer) error) func(cmd *cobra.Command, args []string) error {
return func(c *cobra.Command, args []string) error {
err := handler(args, c.OutOrStdout())
var shouldDisplayUsage errorShouldDisplayUsage
if errors.As(err, &shouldDisplayUsage) {
c.SetOut(c.ErrOrStderr()) // This mutates c, but we are failing anyway.
_ = c.Help() // Even if this failed, we prefer to report the original error
}
return err
}
}
// deprecatedTLSVerifyOption represents a deprecated --tls-verify option,
// which was accepted for all subcommands, for a time.
// Every user should call deprecatedTLSVerifyOption.warnIfUsed() as part of handling the CLI,
// whether or not the value actually ends up being used.
// DO NOT ADD ANY NEW USES OF THIS; just call dockerImageFlags with an appropriate, possibly empty, flagPrefix.
type deprecatedTLSVerifyOption struct {
tlsVerify commonFlag.OptionalBool // FIXME FIXME: Warn if this is used, or even if it is ignored.
}
// warnIfUsed warns if tlsVerify was set by the user, and suggests alternatives (which should
// start with "--").
// Every user should call this as part of handling the CLI, whether or not the value actually
// ends up being used.
func (opts *deprecatedTLSVerifyOption) warnIfUsed(alternatives []string) {
if opts.tlsVerify.Present() {
logrus.Warnf("'--tls-verify' is deprecated, instead use: %s", strings.Join(alternatives, ", "))
}
}
// deprecatedTLSVerifyFlags prepares the CLI flag writing into deprecatedTLSVerifyOption, and the managed deprecatedTLSVerifyOption structure.
// DO NOT ADD ANY NEW USES OF THIS; just call dockerImageFlags with an appropriate, possibly empty, flagPrefix.
func deprecatedTLSVerifyFlags() (pflag.FlagSet, *deprecatedTLSVerifyOption) {
opts := deprecatedTLSVerifyOption{}
fs := pflag.FlagSet{}
flag := commonFlag.OptionalBoolFlag(&fs, &opts.tlsVerify, "tls-verify", "require HTTPS and verify certificates when accessing the container registry")
flag.Hidden = true
return fs, &opts
}
// sharedImageOptions collects CLI flags which are image-related, but do not change across images.
// This really should be a part of globalOptions, but that would break existing users of (skopeo copy --authfile=).
type sharedImageOptions struct {
authFilePath string // Path to a */containers/auth.json
}
// sharedImageFlags prepares a collection of CLI flags writing into sharedImageOptions, and the managed sharedImageOptions structure.
func sharedImageFlags() (pflag.FlagSet, *sharedImageOptions) {
opts := sharedImageOptions{}
fs := pflag.FlagSet{}
fs.StringVar(&opts.authFilePath, "authfile", os.Getenv("REGISTRY_AUTH_FILE"), "path of the registry credentials file. Default is ${XDG_RUNTIME_DIR}/containers/auth.json")
return fs, &opts
}
// dockerImageOptions collects CLI flags specific to the "docker" transport, which are
// the same across subcommands, but may be different for each image
// (e.g. may differ between the source and destination of a copy)
type dockerImageOptions struct {
global *globalOptions // May be shared across several imageOptions instances.
shared *sharedImageOptions // May be shared across several imageOptions instances.
deprecatedTLSVerify *deprecatedTLSVerifyOption // May be shared across several imageOptions instances, or nil.
authFilePath commonFlag.OptionalString // Path to a */containers/auth.json (prefixed version to override shared image option).
credsOption commonFlag.OptionalString // username[:password] for accessing a registry
userName commonFlag.OptionalString // username for accessing a registry
password commonFlag.OptionalString // password for accessing a registry
registryToken commonFlag.OptionalString // token to be used directly as a Bearer token when accessing the registry
dockerCertPath string // A directory using Docker-like *.{crt,cert,key} files for connecting to a registry or a daemon
tlsVerify commonFlag.OptionalBool // Require HTTPS and verify certificates (for docker: and docker-daemon:)
noCreds bool // Access the registry anonymously
}
// imageOptions collects CLI flags which are the same across subcommands, but may be different for each image
// (e.g. may differ between the source and destination of a copy)
type imageOptions struct {
dockerImageOptions
sharedBlobDir string // A directory to use for OCI blobs, shared across repositories
dockerDaemonHost string // docker-daemon: host to connect to
}
// dockerImageFlags prepares a collection of docker-transport specific CLI flags
// writing into imageOptions, and the managed imageOptions structure.
func dockerImageFlags(global *globalOptions, shared *sharedImageOptions, deprecatedTLSVerify *deprecatedTLSVerifyOption, flagPrefix, credsOptionAlias string) (pflag.FlagSet, *imageOptions) {
flags := imageOptions{
dockerImageOptions: dockerImageOptions{
global: global,
shared: shared,
deprecatedTLSVerify: deprecatedTLSVerify,
},
}
fs := pflag.FlagSet{}
if flagPrefix != "" {
// the non-prefixed flag is handled by a shared flag.
fs.Var(commonFlag.NewOptionalStringValue(&flags.authFilePath), flagPrefix+"authfile", "path of the registry credentials file. Default is ${XDG_RUNTIME_DIR}/containers/auth.json")
}
fs.Var(commonFlag.NewOptionalStringValue(&flags.credsOption), flagPrefix+"creds", "Use `USERNAME[:PASSWORD]` for accessing the registry")
fs.Var(commonFlag.NewOptionalStringValue(&flags.userName), flagPrefix+"username", "Username for accessing the registry")
fs.Var(commonFlag.NewOptionalStringValue(&flags.password), flagPrefix+"password", "Password for accessing the registry")
if credsOptionAlias != "" {
// This is horribly ugly, but we need to support the old option forms of (skopeo copy) for compatibility.
// Don't add any more cases like this.
f := fs.VarPF(commonFlag.NewOptionalStringValue(&flags.credsOption), credsOptionAlias, "", "Use `USERNAME[:PASSWORD]` for accessing the registry")
f.Hidden = true
}
fs.Var(commonFlag.NewOptionalStringValue(&flags.registryToken), flagPrefix+"registry-token", "Provide a Bearer token for accessing the registry")
fs.StringVar(&flags.dockerCertPath, flagPrefix+"cert-dir", "", "use certificates at `PATH` (*.crt, *.cert, *.key) to connect to the registry or daemon")
commonFlag.OptionalBoolFlag(&fs, &flags.tlsVerify, flagPrefix+"tls-verify", "require HTTPS and verify certificates when talking to the container registry or daemon")
fs.BoolVar(&flags.noCreds, flagPrefix+"no-creds", false, "Access the registry anonymously")
return fs, &flags
}
// imageFlags prepares a collection of CLI flags writing into imageOptions, and the managed imageOptions structure.
func imageFlags(global *globalOptions, shared *sharedImageOptions, deprecatedTLSVerify *deprecatedTLSVerifyOption, flagPrefix, credsOptionAlias string) (pflag.FlagSet, *imageOptions) {
dockerFlags, opts := dockerImageFlags(global, shared, deprecatedTLSVerify, flagPrefix, credsOptionAlias)
fs := pflag.FlagSet{}
fs.AddFlagSet(&dockerFlags)
fs.StringVar(&opts.sharedBlobDir, flagPrefix+"shared-blob-dir", "", "`DIRECTORY` to use to share blobs across OCI repositories")
fs.StringVar(&opts.dockerDaemonHost, flagPrefix+"daemon-host", "", "use docker daemon host at `HOST` (docker-daemon: only)")
return fs, opts
}
func retryFlags() (pflag.FlagSet, *retry.Options) {
opts := retry.Options{}
fs := pflag.FlagSet{}
fs.IntVar(&opts.MaxRetry, "retry-times", 0, "the number of times to possibly retry")
fs.DurationVar(&opts.Delay, "retry-delay", 0*time.Second, "Fixed delay between retries. If not set, retry uses an exponential backoff delay.")
return fs, &opts
}
// newSystemContext returns a *types.SystemContext corresponding to opts.
// It is guaranteed to return a fresh instance, so it is safe to make additional updates to it.
func (opts *imageOptions) newSystemContext() (*types.SystemContext, error) {
// *types.SystemContext instance from globalOptions
// imageOptions option overrides the instance if both are present.
ctx, err := opts.global.newSystemContext()
if err != nil {
return nil, err
}
ctx.DockerCertPath = opts.dockerCertPath
ctx.OCISharedBlobDirPath = opts.sharedBlobDir
ctx.AuthFilePath = opts.shared.authFilePath
ctx.DockerDaemonHost = opts.dockerDaemonHost
ctx.DockerDaemonCertPath = opts.dockerCertPath
if opts.authFilePath.Present() {
ctx.AuthFilePath = opts.authFilePath.Value()
}
if opts.deprecatedTLSVerify != nil && opts.deprecatedTLSVerify.tlsVerify.Present() {
// If both this deprecated option and a non-deprecated option is present, we use the latter value.
ctx.DockerInsecureSkipTLSVerify = types.NewOptionalBool(!opts.deprecatedTLSVerify.tlsVerify.Value())
}
if opts.tlsVerify.Present() {
ctx.DockerDaemonInsecureSkipTLSVerify = !opts.tlsVerify.Value()
}
if opts.tlsVerify.Present() {
ctx.DockerInsecureSkipTLSVerify = types.NewOptionalBool(!opts.tlsVerify.Value())
}
if opts.credsOption.Present() && opts.noCreds {
return nil, errors.New("creds and no-creds cannot be specified at the same time")
}
if opts.userName.Present() && opts.noCreds {
return nil, errors.New("username and no-creds cannot be specified at the same time")
}
if opts.credsOption.Present() && opts.userName.Present() {
return nil, errors.New("creds and username cannot be specified at the same time")
}
// if any of username or password is present, then both are expected to be present
if opts.userName.Present() != opts.password.Present() {
if opts.userName.Present() {
return nil, errors.New("password must be specified when username is specified")
}
return nil, errors.New("username must be specified when password is specified")
}
if opts.credsOption.Present() {
var err error
ctx.DockerAuthConfig, err = getDockerAuth(opts.credsOption.Value())
if err != nil {
return nil, err
}
} else if opts.userName.Present() {
ctx.DockerAuthConfig = &types.DockerAuthConfig{
Username: opts.userName.Value(),
Password: opts.password.Value(),
}
}
if opts.registryToken.Present() {
ctx.DockerBearerRegistryToken = opts.registryToken.Value()
}
if opts.noCreds {
ctx.DockerAuthConfig = &types.DockerAuthConfig{}
}
return ctx, nil
}
// imageDestOptions is a superset of imageOptions specialized for image destinations.
// Every user should call imageDestOptions.warnAboutIneffectiveOptions() as part of handling the CLI
type imageDestOptions struct {
*imageOptions
dirForceCompression bool // Compress layers when saving to the dir: transport
dirForceDecompression bool // Decompress layers when saving to the dir: transport
ociAcceptUncompressedLayers bool // Whether to accept uncompressed layers in the oci: transport
compressionFormat string // Format to use for the compression
compressionLevel commonFlag.OptionalInt // Level to use for the compression
precomputeDigests bool // Precompute digests to dedup layers when saving to the docker: transport
forceCompressionFormat bool // Ensures that the compression algorithm set in compressionFormat is used exclusively
imageDestFlagPrefix string
}
// imageDestFlags prepares a collection of CLI flags writing into imageDestOptions, and the managed imageDestOptions structure.
func imageDestFlags(global *globalOptions, shared *sharedImageOptions, deprecatedTLSVerify *deprecatedTLSVerifyOption, flagPrefix, credsOptionAlias string) (pflag.FlagSet, *imageDestOptions) {
genericFlags, genericOptions := imageFlags(global, shared, deprecatedTLSVerify, flagPrefix, credsOptionAlias)
opts := imageDestOptions{imageOptions: genericOptions, imageDestFlagPrefix: flagPrefix}
fs := pflag.FlagSet{}
fs.AddFlagSet(&genericFlags)
fs.BoolVar(&opts.dirForceCompression, flagPrefix+"compress", false, "Compress tarball image layers when saving to directory using the 'dir' transport. (default is same compression type as source)")
fs.BoolVar(&opts.dirForceDecompression, flagPrefix+"decompress", false, "Decompress tarball image layers when saving to directory using the 'dir' transport. (default is same compression type as source)")
fs.BoolVar(&opts.ociAcceptUncompressedLayers, flagPrefix+"oci-accept-uncompressed-layers", false, "Allow uncompressed image layers when saving to an OCI image using the 'oci' transport. (default is to compress things that aren't compressed)")
fs.StringVar(&opts.compressionFormat, flagPrefix+"compress-format", "", "`FORMAT` to use for the compression")
fs.Var(commonFlag.NewOptionalIntValue(&opts.compressionLevel), flagPrefix+"compress-level", "`LEVEL` to use for the compression")
f
gitextract_nfgi394f/
├── .cirrus.yml
├── .fmf/
│ └── version
├── .github/
│ ├── renovate.json5
│ └── workflows/
│ ├── check_cirrus_cron.yml
│ ├── issue_pr_lock.yml
│ └── stale.yml
├── .gitignore
├── .golangci.yml
├── .packit.yaml
├── CODE-OF-CONDUCT.md
├── CONTRIBUTING.md
├── GOVERNANCE.md
├── LICENSE
├── MAINTAINERS.md
├── Makefile
├── OWNERS
├── README.md
├── ROADMAP.md
├── SECURITY.md
├── cmd/
│ └── skopeo/
│ ├── completions.go
│ ├── copy.go
│ ├── copy_test.go
│ ├── delete.go
│ ├── fixtures/
│ │ ├── .gitignore
│ │ ├── corrupt.signature
│ │ ├── empty.passphrase
│ │ ├── image.manifest.json
│ │ ├── image.signature
│ │ ├── pubring.gpg
│ │ ├── secring.gpg
│ │ ├── trustdb.gpg
│ │ └── v2s1-invalid-signatures.manifest.json
│ ├── generate_sigstore_key.go
│ ├── generate_sigstore_key_test.go
│ ├── inspect/
│ │ └── output.go
│ ├── inspect.go
│ ├── layers.go
│ ├── list_tags.go
│ ├── list_tags_test.go
│ ├── login.go
│ ├── login_test.go
│ ├── logout.go
│ ├── logout_test.go
│ ├── main.go
│ ├── main_test.go
│ ├── manifest.go
│ ├── manifest_test.go
│ ├── proxy.go
│ ├── proxy_windows.go
│ ├── signing.go
│ ├── signing_test.go
│ ├── sync.go
│ ├── sync_test.go
│ ├── unshare.go
│ ├── unshare_linux.go
│ ├── utils.go
│ ├── utils_nosequoia_test.go
│ ├── utils_sequoia_test.go
│ └── utils_test.go
├── contrib/
│ ├── cirrus/
│ │ ├── mac_cleanup.sh
│ │ ├── ostree_ext.dockerfile
│ │ └── runner.sh
│ └── skopeoimage/
│ └── README.md
├── default-policy.json
├── default.yaml
├── docs/
│ ├── skopeo-copy.1.md
│ ├── skopeo-delete.1.md
│ ├── skopeo-generate-sigstore-key.1.md
│ ├── skopeo-inspect.1.md
│ ├── skopeo-list-tags.1.md
│ ├── skopeo-login.1.md
│ ├── skopeo-logout.1.md
│ ├── skopeo-manifest-digest.1.md
│ ├── skopeo-standalone-sign.1.md
│ ├── skopeo-standalone-verify.1.md
│ ├── skopeo-sync.1.md
│ └── skopeo.1.md
├── docs-experimental/
│ └── skopeo-experimental-image-proxy.1.md
├── go.mod
├── go.sum
├── hack/
│ ├── btrfs_installed_tag.sh
│ ├── get_ci_vm.sh
│ ├── get_fqin.sh
│ ├── libsubid_tag.sh
│ ├── man-page-checker
│ ├── sqlite_tag.sh
│ ├── test-system.sh
│ ├── tree_status.sh
│ ├── validate-git-marks.sh
│ ├── validate-vet.sh
│ ├── warn-destructive-tests.sh
│ └── xref-helpmsgs-manpages
├── install.md
├── integration/
│ ├── blocked_test.go
│ ├── check_test.go
│ ├── copy_test.go
│ ├── fixtures/
│ │ ├── .gitignore
│ │ ├── blocked-registries.conf
│ │ ├── data/
│ │ │ ├── keystore/
│ │ │ │ ├── keystore.cookie
│ │ │ │ └── softkeys/
│ │ │ │ ├── 1F5825285B785E1DB13BF36D2D11A19ABA41C6AE.pgp
│ │ │ │ └── 50DDE898DF4E48755C8C2B7AF6F908B6FA48A229.pgp
│ │ │ └── pgp.cert.d/
│ │ │ ├── 1f/
│ │ │ │ └── 5825285b785e1db13bf36d2d11a19aba41c6ae
│ │ │ ├── 4d/
│ │ │ │ └── 8bcd544b7573eefaad18c278473e5f255d10b8
│ │ │ ├── 50/
│ │ │ │ └── dde898df4e48755c8c2b7af6f908b6fa48a229
│ │ │ ├── 68/
│ │ │ │ └── de230c4a009f5ee5fbb27984642d0130b86046
│ │ │ ├── trust-root
│ │ │ └── writelock
│ │ ├── image.manifest.json
│ │ ├── no-passphrase.pub
│ │ ├── policy.json
│ │ ├── registries.conf
│ │ ├── registries.yaml
│ │ ├── tls-details-1.3.yaml
│ │ ├── tls-details-anything.yaml
│ │ ├── tls-details-pqc-only.yaml
│ │ ├── uncompressed-image-s1/
│ │ │ ├── 160d823fdc48e62f97ba62df31e55424f8f5eb6b679c865eec6e59adfe304710
│ │ │ └── manifest.json
│ │ ├── uncompressed-image-s2/
│ │ │ ├── 160d823fdc48e62f97ba62df31e55424f8f5eb6b679c865eec6e59adfe304710
│ │ │ ├── 86ce150e65c72b30f885c261449d18b7c6832596916e7f654e08377b5a67b4ff
│ │ │ └── manifest.json
│ │ ├── with-passphrase.passphrase
│ │ └── with-passphrase.pub
│ ├── fixtures_info_test.go
│ ├── openshift_shell_test.go
│ ├── openshift_test.go
│ ├── procutils_linux_test.go
│ ├── procutils_test.go
│ ├── proxy_test.go
│ ├── registry_test.go
│ ├── signing_test.go
│ ├── sync_test.go
│ ├── tls_test.go
│ ├── user_agent_test.go
│ └── utils_test.go
├── plans/
│ └── main.fmf
├── rpm/
│ └── skopeo.spec
├── systemtest/
│ ├── 001-basic.bats
│ ├── 010-inspect.bats
│ ├── 020-copy.bats
│ ├── 030-local-registry-tls.bats
│ ├── 040-local-registry-auth.bats
│ ├── 050-signing.bats
│ ├── 060-delete.bats
│ ├── 070-list-tags.bats
│ ├── 080-sync.bats
│ ├── helpers.bash
│ ├── make-noarch-manifest
│ ├── run-tests
│ ├── testdata/
│ │ ├── busybox_latest.sif
│ │ └── docker-two-images.tar.xz
│ └── tmt/
│ └── main.fmf
├── vendor/
│ ├── cyphar.com/
│ │ └── go-pathrs/
│ │ ├── .golangci.yml
│ │ ├── COPYING
│ │ ├── doc.go
│ │ ├── handle_linux.go
│ │ ├── internal/
│ │ │ ├── fdutils/
│ │ │ │ └── fd_linux.go
│ │ │ └── libpathrs/
│ │ │ ├── error_unix.go
│ │ │ └── libpathrs_linux.go
│ │ ├── procfs/
│ │ │ └── procfs_linux.go
│ │ ├── root_linux.go
│ │ └── utils_linux.go
│ ├── dario.cat/
│ │ └── mergo/
│ │ ├── .deepsource.toml
│ │ ├── .gitignore
│ │ ├── .travis.yml
│ │ ├── CODE_OF_CONDUCT.md
│ │ ├── CONTRIBUTING.md
│ │ ├── FUNDING.json
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── SECURITY.md
│ │ ├── doc.go
│ │ ├── map.go
│ │ ├── merge.go
│ │ └── mergo.go
│ ├── github.com/
│ │ ├── BurntSushi/
│ │ │ └── toml/
│ │ │ ├── .gitignore
│ │ │ ├── COPYING
│ │ │ ├── README.md
│ │ │ ├── decode.go
│ │ │ ├── deprecated.go
│ │ │ ├── doc.go
│ │ │ ├── encode.go
│ │ │ ├── error.go
│ │ │ ├── internal/
│ │ │ │ └── tz.go
│ │ │ ├── lex.go
│ │ │ ├── meta.go
│ │ │ ├── parse.go
│ │ │ ├── type_fields.go
│ │ │ └── type_toml.go
│ │ ├── Masterminds/
│ │ │ └── semver/
│ │ │ └── v3/
│ │ │ ├── .gitignore
│ │ │ ├── .golangci.yml
│ │ │ ├── CHANGELOG.md
│ │ │ ├── LICENSE.txt
│ │ │ ├── Makefile
│ │ │ ├── README.md
│ │ │ ├── SECURITY.md
│ │ │ ├── collection.go
│ │ │ ├── constraints.go
│ │ │ ├── doc.go
│ │ │ └── version.go
│ │ ├── Microsoft/
│ │ │ └── go-winio/
│ │ │ ├── .gitattributes
│ │ │ ├── .gitignore
│ │ │ ├── .golangci.yml
│ │ │ ├── CODEOWNERS
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── SECURITY.md
│ │ │ ├── backup.go
│ │ │ ├── doc.go
│ │ │ ├── ea.go
│ │ │ ├── file.go
│ │ │ ├── fileinfo.go
│ │ │ ├── hvsock.go
│ │ │ ├── internal/
│ │ │ │ ├── fs/
│ │ │ │ │ ├── doc.go
│ │ │ │ │ ├── fs.go
│ │ │ │ │ ├── security.go
│ │ │ │ │ └── zsyscall_windows.go
│ │ │ │ ├── socket/
│ │ │ │ │ ├── rawaddr.go
│ │ │ │ │ ├── socket.go
│ │ │ │ │ └── zsyscall_windows.go
│ │ │ │ └── stringbuffer/
│ │ │ │ └── wstring.go
│ │ │ ├── pipe.go
│ │ │ ├── pkg/
│ │ │ │ └── guid/
│ │ │ │ ├── guid.go
│ │ │ │ ├── guid_nonwindows.go
│ │ │ │ ├── guid_windows.go
│ │ │ │ └── variant_string.go
│ │ │ ├── privilege.go
│ │ │ ├── reparse.go
│ │ │ ├── sd.go
│ │ │ ├── syscall.go
│ │ │ └── zsyscall_windows.go
│ │ ├── VividCortex/
│ │ │ └── ewma/
│ │ │ ├── .gitignore
│ │ │ ├── .whitesource
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── codecov.yml
│ │ │ └── ewma.go
│ │ ├── acarl005/
│ │ │ └── stripansi/
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ └── stripansi.go
│ │ ├── cespare/
│ │ │ └── xxhash/
│ │ │ └── v2/
│ │ │ ├── LICENSE.txt
│ │ │ ├── README.md
│ │ │ ├── testall.sh
│ │ │ ├── xxhash.go
│ │ │ ├── xxhash_amd64.s
│ │ │ ├── xxhash_arm64.s
│ │ │ ├── xxhash_asm.go
│ │ │ ├── xxhash_other.go
│ │ │ ├── xxhash_safe.go
│ │ │ └── xxhash_unsafe.go
│ │ ├── clipperhouse/
│ │ │ └── uax29/
│ │ │ └── v2/
│ │ │ ├── LICENSE
│ │ │ └── graphemes/
│ │ │ ├── README.md
│ │ │ ├── ansi.go
│ │ │ ├── ansi8.go
│ │ │ ├── iterator.go
│ │ │ ├── reader.go
│ │ │ ├── splitfunc.go
│ │ │ └── trie.go
│ │ ├── containerd/
│ │ │ ├── errdefs/
│ │ │ │ ├── LICENSE
│ │ │ │ ├── README.md
│ │ │ │ ├── errors.go
│ │ │ │ ├── pkg/
│ │ │ │ │ ├── LICENSE
│ │ │ │ │ ├── errhttp/
│ │ │ │ │ │ └── http.go
│ │ │ │ │ └── internal/
│ │ │ │ │ └── cause/
│ │ │ │ │ └── cause.go
│ │ │ │ └── resolve.go
│ │ │ └── stargz-snapshotter/
│ │ │ └── estargz/
│ │ │ ├── LICENSE
│ │ │ ├── build.go
│ │ │ ├── errorutil/
│ │ │ │ └── errors.go
│ │ │ ├── estargz.go
│ │ │ ├── gzip.go
│ │ │ ├── testutil.go
│ │ │ └── types.go
│ │ ├── containers/
│ │ │ ├── libtrust/
│ │ │ │ ├── CODE-OF-CONDUCT.md
│ │ │ │ ├── CONTRIBUTING.md
│ │ │ │ ├── LICENSE
│ │ │ │ ├── MAINTAINERS
│ │ │ │ ├── README.md
│ │ │ │ ├── SECURITY.md
│ │ │ │ ├── certificates.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── ec_key.go
│ │ │ │ ├── ec_key_no_openssl.go
│ │ │ │ ├── ec_key_openssl.go
│ │ │ │ ├── filter.go
│ │ │ │ ├── hash.go
│ │ │ │ ├── jsonsign.go
│ │ │ │ ├── key.go
│ │ │ │ ├── key_files.go
│ │ │ │ ├── key_manager.go
│ │ │ │ ├── rsa_key.go
│ │ │ │ └── util.go
│ │ │ └── ocicrypt/
│ │ │ ├── .gitignore
│ │ │ ├── .golangci.yml
│ │ │ ├── ADOPTERS.md
│ │ │ ├── CODE-OF-CONDUCT.md
│ │ │ ├── LICENSE
│ │ │ ├── MAINTAINERS
│ │ │ ├── Makefile
│ │ │ ├── README.md
│ │ │ ├── SECURITY.md
│ │ │ ├── blockcipher/
│ │ │ │ ├── blockcipher.go
│ │ │ │ └── blockcipher_aes_ctr.go
│ │ │ ├── config/
│ │ │ │ ├── config.go
│ │ │ │ ├── constructors.go
│ │ │ │ ├── keyprovider-config/
│ │ │ │ │ └── config.go
│ │ │ │ └── pkcs11config/
│ │ │ │ └── config.go
│ │ │ ├── crypto/
│ │ │ │ └── pkcs11/
│ │ │ │ ├── common.go
│ │ │ │ ├── pkcs11helpers.go
│ │ │ │ ├── pkcs11helpers_nocgo.go
│ │ │ │ └── utils.go
│ │ │ ├── encryption.go
│ │ │ ├── gpg.go
│ │ │ ├── gpgvault.go
│ │ │ ├── helpers/
│ │ │ │ └── parse_helpers.go
│ │ │ ├── keywrap/
│ │ │ │ ├── jwe/
│ │ │ │ │ └── keywrapper_jwe.go
│ │ │ │ ├── keyprovider/
│ │ │ │ │ └── keyprovider.go
│ │ │ │ ├── keywrap.go
│ │ │ │ ├── pgp/
│ │ │ │ │ └── keywrapper_gpg.go
│ │ │ │ ├── pkcs11/
│ │ │ │ │ └── keywrapper_pkcs11.go
│ │ │ │ └── pkcs7/
│ │ │ │ └── keywrapper_pkcs7.go
│ │ │ ├── reader.go
│ │ │ ├── spec/
│ │ │ │ └── spec.go
│ │ │ └── utils/
│ │ │ ├── delayedreader.go
│ │ │ ├── ioutils.go
│ │ │ ├── keyprovider/
│ │ │ │ ├── keyprovider.pb.go
│ │ │ │ └── keyprovider.proto
│ │ │ ├── testing.go
│ │ │ └── utils.go
│ │ ├── coreos/
│ │ │ └── go-oidc/
│ │ │ └── v3/
│ │ │ ├── LICENSE
│ │ │ ├── NOTICE
│ │ │ └── oidc/
│ │ │ ├── jose.go
│ │ │ ├── jwks.go
│ │ │ ├── oidc.go
│ │ │ └── verify.go
│ │ ├── cyberphone/
│ │ │ └── json-canonicalization/
│ │ │ ├── LICENSE
│ │ │ └── go/
│ │ │ └── src/
│ │ │ └── webpki.org/
│ │ │ └── jsoncanonicalizer/
│ │ │ ├── es6numfmt.go
│ │ │ └── jsoncanonicalizer.go
│ │ ├── cyphar/
│ │ │ └── filepath-securejoin/
│ │ │ ├── .golangci.yml
│ │ │ ├── CHANGELOG.md
│ │ │ ├── COPYING.md
│ │ │ ├── LICENSE.BSD
│ │ │ ├── LICENSE.MPL-2.0
│ │ │ ├── README.md
│ │ │ ├── VERSION
│ │ │ ├── codecov.yml
│ │ │ ├── doc.go
│ │ │ ├── internal/
│ │ │ │ └── consts/
│ │ │ │ └── consts.go
│ │ │ ├── join.go
│ │ │ ├── pathrs-lite/
│ │ │ │ ├── README.md
│ │ │ │ ├── doc.go
│ │ │ │ ├── internal/
│ │ │ │ │ ├── assert/
│ │ │ │ │ │ └── assert.go
│ │ │ │ │ ├── errors_linux.go
│ │ │ │ │ ├── fd/
│ │ │ │ │ │ ├── at_linux.go
│ │ │ │ │ │ ├── fd.go
│ │ │ │ │ │ ├── fd_linux.go
│ │ │ │ │ │ ├── mount_linux.go
│ │ │ │ │ │ └── openat2_linux.go
│ │ │ │ │ ├── gocompat/
│ │ │ │ │ │ ├── README.md
│ │ │ │ │ │ ├── doc.go
│ │ │ │ │ │ ├── gocompat_atomic_go119.go
│ │ │ │ │ │ ├── gocompat_atomic_unsupported.go
│ │ │ │ │ │ ├── gocompat_errors_go120.go
│ │ │ │ │ │ ├── gocompat_errors_unsupported.go
│ │ │ │ │ │ ├── gocompat_generics_go121.go
│ │ │ │ │ │ └── gocompat_generics_unsupported.go
│ │ │ │ │ ├── gopathrs/
│ │ │ │ │ │ ├── doc.go
│ │ │ │ │ │ ├── lookup_linux.go
│ │ │ │ │ │ ├── mkdir_linux.go
│ │ │ │ │ │ ├── open_linux.go
│ │ │ │ │ │ └── openat2_linux.go
│ │ │ │ │ ├── kernelversion/
│ │ │ │ │ │ └── kernel_linux.go
│ │ │ │ │ ├── linux/
│ │ │ │ │ │ ├── doc.go
│ │ │ │ │ │ ├── mount_linux.go
│ │ │ │ │ │ └── openat2_linux.go
│ │ │ │ │ └── procfs/
│ │ │ │ │ ├── procfs_linux.go
│ │ │ │ │ └── procfs_lookup_linux.go
│ │ │ │ ├── mkdir.go
│ │ │ │ ├── mkdir_libpathrs.go
│ │ │ │ ├── mkdir_purego.go
│ │ │ │ ├── open.go
│ │ │ │ ├── open_libpathrs.go
│ │ │ │ ├── open_purego.go
│ │ │ │ └── procfs/
│ │ │ │ ├── procfs_libpathrs.go
│ │ │ │ └── procfs_purego.go
│ │ │ └── vfs.go
│ │ ├── davecgh/
│ │ │ └── go-spew/
│ │ │ ├── LICENSE
│ │ │ └── spew/
│ │ │ ├── bypass.go
│ │ │ ├── bypasssafe.go
│ │ │ ├── common.go
│ │ │ ├── config.go
│ │ │ ├── doc.go
│ │ │ ├── dump.go
│ │ │ ├── format.go
│ │ │ └── spew.go
│ │ ├── distribution/
│ │ │ └── reference/
│ │ │ ├── .gitattributes
│ │ │ ├── .gitignore
│ │ │ ├── .golangci.yml
│ │ │ ├── CODE-OF-CONDUCT.md
│ │ │ ├── CONTRIBUTING.md
│ │ │ ├── GOVERNANCE.md
│ │ │ ├── LICENSE
│ │ │ ├── MAINTAINERS
│ │ │ ├── Makefile
│ │ │ ├── README.md
│ │ │ ├── SECURITY.md
│ │ │ ├── helpers.go
│ │ │ ├── normalize.go
│ │ │ ├── reference.go
│ │ │ ├── regexp.go
│ │ │ └── sort.go
│ │ ├── docker/
│ │ │ ├── distribution/
│ │ │ │ ├── LICENSE
│ │ │ │ └── registry/
│ │ │ │ └── api/
│ │ │ │ ├── errcode/
│ │ │ │ │ ├── errors.go
│ │ │ │ │ ├── handler.go
│ │ │ │ │ └── register.go
│ │ │ │ └── v2/
│ │ │ │ ├── descriptors.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── errors.go
│ │ │ │ ├── headerparser.go
│ │ │ │ ├── routes.go
│ │ │ │ └── urls.go
│ │ │ ├── docker-credential-helpers/
│ │ │ │ ├── LICENSE
│ │ │ │ ├── client/
│ │ │ │ │ ├── client.go
│ │ │ │ │ └── command.go
│ │ │ │ └── credentials/
│ │ │ │ ├── credentials.go
│ │ │ │ ├── error.go
│ │ │ │ ├── helper.go
│ │ │ │ └── version.go
│ │ │ ├── go-connections/
│ │ │ │ ├── LICENSE
│ │ │ │ ├── sockets/
│ │ │ │ │ ├── inmem_socket.go
│ │ │ │ │ ├── proxy.go
│ │ │ │ │ ├── sockets.go
│ │ │ │ │ ├── sockets_unix.go
│ │ │ │ │ ├── sockets_windows.go
│ │ │ │ │ ├── tcp_socket.go
│ │ │ │ │ ├── unix_socket.go
│ │ │ │ │ ├── unix_socket_unix.go
│ │ │ │ │ └── unix_socket_windows.go
│ │ │ │ └── tlsconfig/
│ │ │ │ ├── certpool.go
│ │ │ │ └── config.go
│ │ │ └── go-units/
│ │ │ ├── CONTRIBUTING.md
│ │ │ ├── LICENSE
│ │ │ ├── MAINTAINERS
│ │ │ ├── README.md
│ │ │ ├── circle.yml
│ │ │ ├── duration.go
│ │ │ ├── size.go
│ │ │ └── ulimit.go
│ │ ├── felixge/
│ │ │ └── httpsnoop/
│ │ │ ├── .gitignore
│ │ │ ├── LICENSE.txt
│ │ │ ├── Makefile
│ │ │ ├── README.md
│ │ │ ├── capture_metrics.go
│ │ │ ├── docs.go
│ │ │ ├── wrap_generated_gteq_1.8.go
│ │ │ └── wrap_generated_lt_1.8.go
│ │ ├── go-jose/
│ │ │ └── go-jose/
│ │ │ └── v4/
│ │ │ ├── .gitignore
│ │ │ ├── .golangci.yml
│ │ │ ├── .travis.yml
│ │ │ ├── CONTRIBUTING.md
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── SECURITY.md
│ │ │ ├── asymmetric.go
│ │ │ ├── cipher/
│ │ │ │ ├── cbc_hmac.go
│ │ │ │ ├── concat_kdf.go
│ │ │ │ ├── ecdh_es.go
│ │ │ │ └── key_wrap.go
│ │ │ ├── crypter.go
│ │ │ ├── doc.go
│ │ │ ├── encoding.go
│ │ │ ├── json/
│ │ │ │ ├── LICENSE
│ │ │ │ ├── README.md
│ │ │ │ ├── decode.go
│ │ │ │ ├── encode.go
│ │ │ │ ├── indent.go
│ │ │ │ ├── scanner.go
│ │ │ │ ├── stream.go
│ │ │ │ └── tags.go
│ │ │ ├── jwe.go
│ │ │ ├── jwk.go
│ │ │ ├── jws.go
│ │ │ ├── opaque.go
│ │ │ ├── shared.go
│ │ │ ├── signing.go
│ │ │ └── symmetric.go
│ │ ├── go-logr/
│ │ │ ├── logr/
│ │ │ │ ├── .golangci.yaml
│ │ │ │ ├── CHANGELOG.md
│ │ │ │ ├── CONTRIBUTING.md
│ │ │ │ ├── LICENSE
│ │ │ │ ├── README.md
│ │ │ │ ├── SECURITY.md
│ │ │ │ ├── context.go
│ │ │ │ ├── context_noslog.go
│ │ │ │ ├── context_slog.go
│ │ │ │ ├── discard.go
│ │ │ │ ├── funcr/
│ │ │ │ │ ├── funcr.go
│ │ │ │ │ └── slogsink.go
│ │ │ │ ├── logr.go
│ │ │ │ ├── sloghandler.go
│ │ │ │ ├── slogr.go
│ │ │ │ └── slogsink.go
│ │ │ └── stdr/
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ └── stdr.go
│ │ ├── golang/
│ │ │ └── protobuf/
│ │ │ ├── AUTHORS
│ │ │ ├── CONTRIBUTORS
│ │ │ ├── LICENSE
│ │ │ └── proto/
│ │ │ ├── buffer.go
│ │ │ ├── defaults.go
│ │ │ ├── deprecated.go
│ │ │ ├── discard.go
│ │ │ ├── extensions.go
│ │ │ ├── properties.go
│ │ │ ├── proto.go
│ │ │ ├── registry.go
│ │ │ ├── text_decode.go
│ │ │ ├── text_encode.go
│ │ │ ├── wire.go
│ │ │ └── wrappers.go
│ │ ├── google/
│ │ │ ├── go-containerregistry/
│ │ │ │ ├── LICENSE
│ │ │ │ └── pkg/
│ │ │ │ ├── name/
│ │ │ │ │ ├── README.md
│ │ │ │ │ ├── check.go
│ │ │ │ │ ├── digest.go
│ │ │ │ │ ├── doc.go
│ │ │ │ │ ├── errors.go
│ │ │ │ │ ├── options.go
│ │ │ │ │ ├── ref.go
│ │ │ │ │ ├── registry.go
│ │ │ │ │ ├── repository.go
│ │ │ │ │ └── tag.go
│ │ │ │ └── v1/
│ │ │ │ ├── config.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── hash.go
│ │ │ │ ├── image.go
│ │ │ │ ├── index.go
│ │ │ │ ├── layer.go
│ │ │ │ ├── manifest.go
│ │ │ │ ├── platform.go
│ │ │ │ ├── progress.go
│ │ │ │ ├── types/
│ │ │ │ │ └── types.go
│ │ │ │ └── zz_deepcopy_generated.go
│ │ │ ├── go-intervals/
│ │ │ │ ├── LICENSE
│ │ │ │ └── intervalset/
│ │ │ │ ├── intervalset.go
│ │ │ │ └── intervalset_immutable.go
│ │ │ └── uuid/
│ │ │ ├── CHANGELOG.md
│ │ │ ├── CONTRIBUTING.md
│ │ │ ├── CONTRIBUTORS
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── dce.go
│ │ │ ├── doc.go
│ │ │ ├── hash.go
│ │ │ ├── marshal.go
│ │ │ ├── node.go
│ │ │ ├── node_js.go
│ │ │ ├── node_net.go
│ │ │ ├── null.go
│ │ │ ├── sql.go
│ │ │ ├── time.go
│ │ │ ├── util.go
│ │ │ ├── uuid.go
│ │ │ ├── version1.go
│ │ │ ├── version4.go
│ │ │ ├── version6.go
│ │ │ └── version7.go
│ │ ├── gorilla/
│ │ │ └── mux/
│ │ │ ├── .editorconfig
│ │ │ ├── .gitignore
│ │ │ ├── LICENSE
│ │ │ ├── Makefile
│ │ │ ├── README.md
│ │ │ ├── doc.go
│ │ │ ├── middleware.go
│ │ │ ├── mux.go
│ │ │ ├── regexp.go
│ │ │ ├── route.go
│ │ │ └── test_helpers.go
│ │ ├── hashicorp/
│ │ │ ├── go-cleanhttp/
│ │ │ │ ├── LICENSE
│ │ │ │ ├── README.md
│ │ │ │ ├── cleanhttp.go
│ │ │ │ ├── doc.go
│ │ │ │ └── handlers.go
│ │ │ ├── go-multierror/
│ │ │ │ ├── .go-version
│ │ │ │ ├── CODEOWNERS
│ │ │ │ ├── LICENSE
│ │ │ │ ├── Makefile
│ │ │ │ ├── README.md
│ │ │ │ ├── append.go
│ │ │ │ ├── flatten.go
│ │ │ │ ├── format.go
│ │ │ │ ├── group.go
│ │ │ │ ├── multierror.go
│ │ │ │ ├── prefix.go
│ │ │ │ └── sort.go
│ │ │ └── go-retryablehttp/
│ │ │ ├── .gitignore
│ │ │ ├── .go-version
│ │ │ ├── .golangci.yml
│ │ │ ├── CHANGELOG.md
│ │ │ ├── CODEOWNERS
│ │ │ ├── LICENSE
│ │ │ ├── Makefile
│ │ │ ├── README.md
│ │ │ ├── cert_error_go119.go
│ │ │ ├── cert_error_go120.go
│ │ │ ├── client.go
│ │ │ └── roundtripper.go
│ │ ├── inconshreveable/
│ │ │ └── mousetrap/
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── trap_others.go
│ │ │ └── trap_windows.go
│ │ ├── klauspost/
│ │ │ ├── compress/
│ │ │ │ ├── .gitattributes
│ │ │ │ ├── .gitignore
│ │ │ │ ├── .goreleaser.yml
│ │ │ │ ├── LICENSE
│ │ │ │ ├── README.md
│ │ │ │ ├── SECURITY.md
│ │ │ │ ├── compressible.go
│ │ │ │ ├── flate/
│ │ │ │ │ ├── deflate.go
│ │ │ │ │ ├── dict_decoder.go
│ │ │ │ │ ├── fast_encoder.go
│ │ │ │ │ ├── huffman_bit_writer.go
│ │ │ │ │ ├── huffman_code.go
│ │ │ │ │ ├── huffman_sortByFreq.go
│ │ │ │ │ ├── huffman_sortByLiteral.go
│ │ │ │ │ ├── inflate.go
│ │ │ │ │ ├── inflate_gen.go
│ │ │ │ │ ├── level1.go
│ │ │ │ │ ├── level2.go
│ │ │ │ │ ├── level3.go
│ │ │ │ │ ├── level4.go
│ │ │ │ │ ├── level5.go
│ │ │ │ │ ├── level6.go
│ │ │ │ │ ├── matchlen_generic.go
│ │ │ │ │ ├── regmask_amd64.go
│ │ │ │ │ ├── regmask_other.go
│ │ │ │ │ ├── stateless.go
│ │ │ │ │ └── token.go
│ │ │ │ ├── fse/
│ │ │ │ │ ├── README.md
│ │ │ │ │ ├── bitreader.go
│ │ │ │ │ ├── bitwriter.go
│ │ │ │ │ ├── bytereader.go
│ │ │ │ │ ├── compress.go
│ │ │ │ │ ├── decompress.go
│ │ │ │ │ └── fse.go
│ │ │ │ ├── gen.sh
│ │ │ │ ├── huff0/
│ │ │ │ │ ├── .gitignore
│ │ │ │ │ ├── README.md
│ │ │ │ │ ├── bitreader.go
│ │ │ │ │ ├── bitwriter.go
│ │ │ │ │ ├── compress.go
│ │ │ │ │ ├── decompress.go
│ │ │ │ │ ├── decompress_amd64.go
│ │ │ │ │ ├── decompress_amd64.s
│ │ │ │ │ ├── decompress_generic.go
│ │ │ │ │ └── huff0.go
│ │ │ │ ├── internal/
│ │ │ │ │ ├── cpuinfo/
│ │ │ │ │ │ ├── cpuinfo.go
│ │ │ │ │ │ ├── cpuinfo_amd64.go
│ │ │ │ │ │ └── cpuinfo_amd64.s
│ │ │ │ │ ├── le/
│ │ │ │ │ │ ├── le.go
│ │ │ │ │ │ ├── unsafe_disabled.go
│ │ │ │ │ │ └── unsafe_enabled.go
│ │ │ │ │ └── snapref/
│ │ │ │ │ ├── LICENSE
│ │ │ │ │ ├── decode.go
│ │ │ │ │ ├── decode_other.go
│ │ │ │ │ ├── encode.go
│ │ │ │ │ ├── encode_other.go
│ │ │ │ │ └── snappy.go
│ │ │ │ ├── s2sx.mod
│ │ │ │ ├── s2sx.sum
│ │ │ │ └── zstd/
│ │ │ │ ├── README.md
│ │ │ │ ├── bitreader.go
│ │ │ │ ├── bitwriter.go
│ │ │ │ ├── blockdec.go
│ │ │ │ ├── blockenc.go
│ │ │ │ ├── blocktype_string.go
│ │ │ │ ├── bytebuf.go
│ │ │ │ ├── bytereader.go
│ │ │ │ ├── decodeheader.go
│ │ │ │ ├── decoder.go
│ │ │ │ ├── decoder_options.go
│ │ │ │ ├── dict.go
│ │ │ │ ├── enc_base.go
│ │ │ │ ├── enc_best.go
│ │ │ │ ├── enc_better.go
│ │ │ │ ├── enc_dfast.go
│ │ │ │ ├── enc_fast.go
│ │ │ │ ├── encoder.go
│ │ │ │ ├── encoder_options.go
│ │ │ │ ├── framedec.go
│ │ │ │ ├── frameenc.go
│ │ │ │ ├── fse_decoder.go
│ │ │ │ ├── fse_decoder_amd64.go
│ │ │ │ ├── fse_decoder_amd64.s
│ │ │ │ ├── fse_decoder_generic.go
│ │ │ │ ├── fse_encoder.go
│ │ │ │ ├── fse_predefined.go
│ │ │ │ ├── hash.go
│ │ │ │ ├── history.go
│ │ │ │ ├── internal/
│ │ │ │ │ └── xxhash/
│ │ │ │ │ ├── LICENSE.txt
│ │ │ │ │ ├── README.md
│ │ │ │ │ ├── xxhash.go
│ │ │ │ │ ├── xxhash_amd64.s
│ │ │ │ │ ├── xxhash_arm64.s
│ │ │ │ │ ├── xxhash_asm.go
│ │ │ │ │ ├── xxhash_other.go
│ │ │ │ │ └── xxhash_safe.go
│ │ │ │ ├── matchlen_amd64.go
│ │ │ │ ├── matchlen_amd64.s
│ │ │ │ ├── matchlen_generic.go
│ │ │ │ ├── seqdec.go
│ │ │ │ ├── seqdec_amd64.go
│ │ │ │ ├── seqdec_amd64.s
│ │ │ │ ├── seqdec_generic.go
│ │ │ │ ├── seqenc.go
│ │ │ │ ├── simple_go124.go
│ │ │ │ ├── snappy.go
│ │ │ │ ├── zip.go
│ │ │ │ └── zstd.go
│ │ │ └── pgzip/
│ │ │ ├── .gitignore
│ │ │ ├── .travis.yml
│ │ │ ├── GO_LICENSE
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── gunzip.go
│ │ │ └── gzip.go
│ │ ├── mattn/
│ │ │ ├── go-runewidth/
│ │ │ │ ├── LICENSE
│ │ │ │ ├── README.md
│ │ │ │ ├── benchstat.txt
│ │ │ │ ├── new.txt
│ │ │ │ ├── old.txt
│ │ │ │ ├── runewidth.go
│ │ │ │ ├── runewidth_appengine.go
│ │ │ │ ├── runewidth_js.go
│ │ │ │ ├── runewidth_posix.go
│ │ │ │ ├── runewidth_table.go
│ │ │ │ └── runewidth_windows.go
│ │ │ └── go-sqlite3/
│ │ │ ├── .codecov.yml
│ │ │ ├── .gitignore
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── backup.go
│ │ │ ├── callback.go
│ │ │ ├── convert.go
│ │ │ ├── doc.go
│ │ │ ├── error.go
│ │ │ ├── sqlite3-binding.c
│ │ │ ├── sqlite3-binding.h
│ │ │ ├── sqlite3.go
│ │ │ ├── sqlite3_context.go
│ │ │ ├── sqlite3_func_crypt.go
│ │ │ ├── sqlite3_go18.go
│ │ │ ├── sqlite3_libsqlite3.go
│ │ │ ├── sqlite3_load_extension.go
│ │ │ ├── sqlite3_load_extension_omit.go
│ │ │ ├── sqlite3_opt_allow_uri_authority.go
│ │ │ ├── sqlite3_opt_app_armor.go
│ │ │ ├── sqlite3_opt_column_metadata.go
│ │ │ ├── sqlite3_opt_foreign_keys.go
│ │ │ ├── sqlite3_opt_fts5.go
│ │ │ ├── sqlite3_opt_icu.go
│ │ │ ├── sqlite3_opt_introspect.go
│ │ │ ├── sqlite3_opt_math_functions.go
│ │ │ ├── sqlite3_opt_os_trace.go
│ │ │ ├── sqlite3_opt_percentile.go
│ │ │ ├── sqlite3_opt_preupdate.go
│ │ │ ├── sqlite3_opt_preupdate_hook.go
│ │ │ ├── sqlite3_opt_preupdate_omit.go
│ │ │ ├── sqlite3_opt_secure_delete.go
│ │ │ ├── sqlite3_opt_secure_delete_fast.go
│ │ │ ├── sqlite3_opt_serialize.go
│ │ │ ├── sqlite3_opt_serialize_omit.go
│ │ │ ├── sqlite3_opt_stat4.go
│ │ │ ├── sqlite3_opt_unlock_notify.c
│ │ │ ├── sqlite3_opt_unlock_notify.go
│ │ │ ├── sqlite3_opt_userauth.go
│ │ │ ├── sqlite3_opt_userauth_omit.go
│ │ │ ├── sqlite3_opt_vacuum_full.go
│ │ │ ├── sqlite3_opt_vacuum_incr.go
│ │ │ ├── sqlite3_opt_vtable.go
│ │ │ ├── sqlite3_other.go
│ │ │ ├── sqlite3_solaris.go
│ │ │ ├── sqlite3_trace.go
│ │ │ ├── sqlite3_type.go
│ │ │ ├── sqlite3_usleep_windows.go
│ │ │ ├── sqlite3_windows.go
│ │ │ ├── sqlite3ext.h
│ │ │ └── static_mock.go
│ │ ├── miekg/
│ │ │ └── pkcs11/
│ │ │ ├── .gitignore
│ │ │ ├── LICENSE
│ │ │ ├── Makefile.release
│ │ │ ├── README.md
│ │ │ ├── error.go
│ │ │ ├── params.go
│ │ │ ├── pkcs11.go
│ │ │ ├── pkcs11.h
│ │ │ ├── pkcs11f.h
│ │ │ ├── pkcs11go.h
│ │ │ ├── pkcs11t.h
│ │ │ ├── release.go
│ │ │ ├── softhsm.conf
│ │ │ ├── softhsm2.conf
│ │ │ ├── types.go
│ │ │ ├── vendor.go
│ │ │ └── zconst.go
│ │ ├── mistifyio/
│ │ │ └── go-zfs/
│ │ │ └── v4/
│ │ │ ├── .envrc
│ │ │ ├── .gitignore
│ │ │ ├── .golangci.yml
│ │ │ ├── .yamllint
│ │ │ ├── CHANGELOG.md
│ │ │ ├── CONTRIBUTING.md
│ │ │ ├── LICENSE
│ │ │ ├── Makefile
│ │ │ ├── README.md
│ │ │ ├── Vagrantfile
│ │ │ ├── error.go
│ │ │ ├── lint.mk
│ │ │ ├── rules.mk
│ │ │ ├── shell.nix
│ │ │ ├── utils.go
│ │ │ ├── utils_notsolaris.go
│ │ │ ├── utils_solaris.go
│ │ │ ├── zfs.go
│ │ │ └── zpool.go
│ │ ├── moby/
│ │ │ ├── docker-image-spec/
│ │ │ │ ├── LICENSE
│ │ │ │ └── specs-go/
│ │ │ │ └── v1/
│ │ │ │ └── image.go
│ │ │ ├── moby/
│ │ │ │ ├── api/
│ │ │ │ │ ├── LICENSE
│ │ │ │ │ └── types/
│ │ │ │ │ ├── blkiodev/
│ │ │ │ │ │ └── blkio.go
│ │ │ │ │ ├── build/
│ │ │ │ │ │ ├── build.go
│ │ │ │ │ │ ├── cache.go
│ │ │ │ │ │ └── disk_usage.go
│ │ │ │ │ ├── checkpoint/
│ │ │ │ │ │ ├── create_request.go
│ │ │ │ │ │ └── list.go
│ │ │ │ │ ├── common/
│ │ │ │ │ │ ├── error_response.go
│ │ │ │ │ │ ├── error_response_ext.go
│ │ │ │ │ │ └── id_response.go
│ │ │ │ │ ├── container/
│ │ │ │ │ │ ├── change_type.go
│ │ │ │ │ │ ├── change_types.go
│ │ │ │ │ │ ├── commit.go
│ │ │ │ │ │ ├── config.go
│ │ │ │ │ │ ├── container.go
│ │ │ │ │ │ ├── create_request.go
│ │ │ │ │ │ ├── create_response.go
│ │ │ │ │ │ ├── disk_usage.go
│ │ │ │ │ │ ├── errors.go
│ │ │ │ │ │ ├── exec.go
│ │ │ │ │ │ ├── exec_create_request.go
│ │ │ │ │ │ ├── exec_start_request.go
│ │ │ │ │ │ ├── filesystem_change.go
│ │ │ │ │ │ ├── health.go
│ │ │ │ │ │ ├── hostconfig.go
│ │ │ │ │ │ ├── hostconfig_unix.go
│ │ │ │ │ │ ├── hostconfig_windows.go
│ │ │ │ │ │ ├── network_settings.go
│ │ │ │ │ │ ├── port_summary.go
│ │ │ │ │ │ ├── state.go
│ │ │ │ │ │ ├── stats.go
│ │ │ │ │ │ ├── top_response.go
│ │ │ │ │ │ ├── update_response.go
│ │ │ │ │ │ ├── wait_exit_error.go
│ │ │ │ │ │ ├── wait_response.go
│ │ │ │ │ │ └── waitcondition.go
│ │ │ │ │ ├── events/
│ │ │ │ │ │ └── events.go
│ │ │ │ │ ├── image/
│ │ │ │ │ │ ├── build_identity.go
│ │ │ │ │ │ ├── delete_response.go
│ │ │ │ │ │ ├── disk_usage.go
│ │ │ │ │ │ ├── history_response_item.go
│ │ │ │ │ │ ├── identity.go
│ │ │ │ │ │ ├── image.go
│ │ │ │ │ │ ├── image_inspect.go
│ │ │ │ │ │ ├── manifest.go
│ │ │ │ │ │ ├── pull_identity.go
│ │ │ │ │ │ ├── signature_identity.go
│ │ │ │ │ │ ├── signature_timestamp.go
│ │ │ │ │ │ ├── signer_identity.go
│ │ │ │ │ │ └── summary.go
│ │ │ │ │ ├── jsonstream/
│ │ │ │ │ │ ├── json_error.go
│ │ │ │ │ │ ├── message.go
│ │ │ │ │ │ └── progress.go
│ │ │ │ │ ├── mount/
│ │ │ │ │ │ └── mount.go
│ │ │ │ │ ├── network/
│ │ │ │ │ │ ├── config_reference.go
│ │ │ │ │ │ ├── connect_request.go
│ │ │ │ │ │ ├── create_response.go
│ │ │ │ │ │ ├── disconnect_request.go
│ │ │ │ │ │ ├── endpoint.go
│ │ │ │ │ │ ├── endpoint_resource.go
│ │ │ │ │ │ ├── hwaddr.go
│ │ │ │ │ │ ├── inspect.go
│ │ │ │ │ │ ├── ipam.go
│ │ │ │ │ │ ├── ipam_status.go
│ │ │ │ │ │ ├── network.go
│ │ │ │ │ │ ├── network_types.go
│ │ │ │ │ │ ├── peer_info.go
│ │ │ │ │ │ ├── port.go
│ │ │ │ │ │ ├── service_info.go
│ │ │ │ │ │ ├── status.go
│ │ │ │ │ │ ├── subnet_status.go
│ │ │ │ │ │ ├── summary.go
│ │ │ │ │ │ └── task.go
│ │ │ │ │ ├── plugin/
│ │ │ │ │ │ ├── .gitignore
│ │ │ │ │ │ ├── capability.go
│ │ │ │ │ │ ├── device.go
│ │ │ │ │ │ ├── env.go
│ │ │ │ │ │ ├── mount.go
│ │ │ │ │ │ ├── plugin.go
│ │ │ │ │ │ └── plugin_responses.go
│ │ │ │ │ ├── registry/
│ │ │ │ │ │ ├── auth_response.go
│ │ │ │ │ │ ├── authconfig.go
│ │ │ │ │ │ ├── registry.go
│ │ │ │ │ │ └── search.go
│ │ │ │ │ ├── storage/
│ │ │ │ │ │ ├── driver_data.go
│ │ │ │ │ │ ├── root_f_s_storage.go
│ │ │ │ │ │ ├── root_f_s_storage_snapshot.go
│ │ │ │ │ │ └── storage.go
│ │ │ │ │ ├── swarm/
│ │ │ │ │ │ ├── common.go
│ │ │ │ │ │ ├── config.go
│ │ │ │ │ │ ├── container.go
│ │ │ │ │ │ ├── network.go
│ │ │ │ │ │ ├── node.go
│ │ │ │ │ │ ├── runtime.go
│ │ │ │ │ │ ├── secret.go
│ │ │ │ │ │ ├── service.go
│ │ │ │ │ │ ├── service_create_response.go
│ │ │ │ │ │ ├── service_update_response.go
│ │ │ │ │ │ ├── swarm.go
│ │ │ │ │ │ └── task.go
│ │ │ │ │ ├── system/
│ │ │ │ │ │ ├── disk_usage.go
│ │ │ │ │ │ ├── info.go
│ │ │ │ │ │ ├── runtime.go
│ │ │ │ │ │ └── version_response.go
│ │ │ │ │ ├── types.go
│ │ │ │ │ └── volume/
│ │ │ │ │ ├── cluster_volume.go
│ │ │ │ │ ├── create_request.go
│ │ │ │ │ ├── disk_usage.go
│ │ │ │ │ ├── list_response.go
│ │ │ │ │ ├── prune_report.go
│ │ │ │ │ └── volume.go
│ │ │ │ └── client/
│ │ │ │ ├── LICENSE
│ │ │ │ ├── README.md
│ │ │ │ ├── auth.go
│ │ │ │ ├── build_cancel.go
│ │ │ │ ├── build_prune.go
│ │ │ │ ├── checkpoint_create.go
│ │ │ │ ├── checkpoint_list.go
│ │ │ │ ├── checkpoint_remove.go
│ │ │ │ ├── client.go
│ │ │ │ ├── client_interfaces.go
│ │ │ │ ├── client_options.go
│ │ │ │ ├── client_responsehook.go
│ │ │ │ ├── client_unix.go
│ │ │ │ ├── client_windows.go
│ │ │ │ ├── config_create.go
│ │ │ │ ├── config_inspect.go
│ │ │ │ ├── config_list.go
│ │ │ │ ├── config_remove.go
│ │ │ │ ├── config_update.go
│ │ │ │ ├── container_attach.go
│ │ │ │ ├── container_commit.go
│ │ │ │ ├── container_copy.go
│ │ │ │ ├── container_create.go
│ │ │ │ ├── container_create_opts.go
│ │ │ │ ├── container_diff.go
│ │ │ │ ├── container_diff_opts.go
│ │ │ │ ├── container_exec.go
│ │ │ │ ├── container_export.go
│ │ │ │ ├── container_inspect.go
│ │ │ │ ├── container_kill.go
│ │ │ │ ├── container_list.go
│ │ │ │ ├── container_logs.go
│ │ │ │ ├── container_pause.go
│ │ │ │ ├── container_prune.go
│ │ │ │ ├── container_remove.go
│ │ │ │ ├── container_rename.go
│ │ │ │ ├── container_resize.go
│ │ │ │ ├── container_restart.go
│ │ │ │ ├── container_start.go
│ │ │ │ ├── container_stats.go
│ │ │ │ ├── container_stop.go
│ │ │ │ ├── container_top.go
│ │ │ │ ├── container_unpause.go
│ │ │ │ ├── container_update.go
│ │ │ │ ├── container_wait.go
│ │ │ │ ├── distribution_inspect.go
│ │ │ │ ├── envvars.go
│ │ │ │ ├── errors.go
│ │ │ │ ├── filters.go
│ │ │ │ ├── hijack.go
│ │ │ │ ├── image_build.go
│ │ │ │ ├── image_build_opts.go
│ │ │ │ ├── image_history.go
│ │ │ │ ├── image_history_opts.go
│ │ │ │ ├── image_import.go
│ │ │ │ ├── image_import_opts.go
│ │ │ │ ├── image_inspect.go
│ │ │ │ ├── image_inspect_opts.go
│ │ │ │ ├── image_list.go
│ │ │ │ ├── image_list_opts.go
│ │ │ │ ├── image_load.go
│ │ │ │ ├── image_load_opts.go
│ │ │ │ ├── image_prune.go
│ │ │ │ ├── image_pull.go
│ │ │ │ ├── image_pull_opts.go
│ │ │ │ ├── image_push.go
│ │ │ │ ├── image_push_opts.go
│ │ │ │ ├── image_remove.go
│ │ │ │ ├── image_remove_opts.go
│ │ │ │ ├── image_save.go
│ │ │ │ ├── image_save_opts.go
│ │ │ │ ├── image_search.go
│ │ │ │ ├── image_search_opts.go
│ │ │ │ ├── image_tag.go
│ │ │ │ ├── internal/
│ │ │ │ │ ├── json-stream.go
│ │ │ │ │ ├── jsonmessages.go
│ │ │ │ │ └── timestamp/
│ │ │ │ │ └── timestamp.go
│ │ │ │ ├── login.go
│ │ │ │ ├── network_connect.go
│ │ │ │ ├── network_create.go
│ │ │ │ ├── network_disconnect.go
│ │ │ │ ├── network_inspect.go
│ │ │ │ ├── network_inspect_opts.go
│ │ │ │ ├── network_list.go
│ │ │ │ ├── network_list_opts.go
│ │ │ │ ├── network_prune.go
│ │ │ │ ├── network_remove.go
│ │ │ │ ├── node_inspect.go
│ │ │ │ ├── node_list.go
│ │ │ │ ├── node_remove.go
│ │ │ │ ├── node_update.go
│ │ │ │ ├── ping.go
│ │ │ │ ├── pkg/
│ │ │ │ │ └── versions/
│ │ │ │ │ └── compare.go
│ │ │ │ ├── plugin_create.go
│ │ │ │ ├── plugin_disable.go
│ │ │ │ ├── plugin_enable.go
│ │ │ │ ├── plugin_inspect.go
│ │ │ │ ├── plugin_install.go
│ │ │ │ ├── plugin_list.go
│ │ │ │ ├── plugin_push.go
│ │ │ │ ├── plugin_remove.go
│ │ │ │ ├── plugin_set.go
│ │ │ │ ├── plugin_upgrade.go
│ │ │ │ ├── request.go
│ │ │ │ ├── secret_create.go
│ │ │ │ ├── secret_inspect.go
│ │ │ │ ├── secret_list.go
│ │ │ │ ├── secret_remove.go
│ │ │ │ ├── secret_update.go
│ │ │ │ ├── service_create.go
│ │ │ │ ├── service_inspect.go
│ │ │ │ ├── service_list.go
│ │ │ │ ├── service_logs.go
│ │ │ │ ├── service_remove.go
│ │ │ │ ├── service_update.go
│ │ │ │ ├── swarm_get_unlock_key.go
│ │ │ │ ├── swarm_init.go
│ │ │ │ ├── swarm_inspect.go
│ │ │ │ ├── swarm_join.go
│ │ │ │ ├── swarm_leave.go
│ │ │ │ ├── swarm_unlock.go
│ │ │ │ ├── swarm_update.go
│ │ │ │ ├── system_disk_usage.go
│ │ │ │ ├── system_events.go
│ │ │ │ ├── system_info.go
│ │ │ │ ├── task_inspect.go
│ │ │ │ ├── task_list.go
│ │ │ │ ├── task_logs.go
│ │ │ │ ├── utils.go
│ │ │ │ ├── version.go
│ │ │ │ ├── volume_create.go
│ │ │ │ ├── volume_inspect.go
│ │ │ │ ├── volume_list.go
│ │ │ │ ├── volume_prune.go
│ │ │ │ ├── volume_remove.go
│ │ │ │ └── volume_update.go
│ │ │ └── sys/
│ │ │ ├── capability/
│ │ │ │ ├── CHANGELOG.md
│ │ │ │ ├── LICENSE
│ │ │ │ ├── README.md
│ │ │ │ ├── capability.go
│ │ │ │ ├── capability_linux.go
│ │ │ │ ├── capability_noop.go
│ │ │ │ ├── enum.go
│ │ │ │ ├── enum_gen.go
│ │ │ │ └── syscall_linux.go
│ │ │ ├── mountinfo/
│ │ │ │ ├── LICENSE
│ │ │ │ ├── doc.go
│ │ │ │ ├── mounted_linux.go
│ │ │ │ ├── mounted_unix.go
│ │ │ │ ├── mountinfo.go
│ │ │ │ ├── mountinfo_bsd.go
│ │ │ │ ├── mountinfo_filters.go
│ │ │ │ ├── mountinfo_freebsdlike.go
│ │ │ │ ├── mountinfo_linux.go
│ │ │ │ ├── mountinfo_openbsd.go
│ │ │ │ ├── mountinfo_unsupported.go
│ │ │ │ └── mountinfo_windows.go
│ │ │ └── user/
│ │ │ ├── LICENSE
│ │ │ ├── idtools.go
│ │ │ ├── idtools_unix.go
│ │ │ ├── idtools_windows.go
│ │ │ ├── lookup_unix.go
│ │ │ ├── user.go
│ │ │ └── user_fuzzer.go
│ │ ├── modern-go/
│ │ │ └── concurrent/
│ │ │ ├── .gitignore
│ │ │ ├── .travis.yml
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── executor.go
│ │ │ ├── go_above_19.go
│ │ │ ├── go_below_19.go
│ │ │ ├── log.go
│ │ │ ├── test.sh
│ │ │ └── unbounded_executor.go
│ │ ├── opencontainers/
│ │ │ ├── go-digest/
│ │ │ │ ├── .mailmap
│ │ │ │ ├── .pullapprove.yml
│ │ │ │ ├── .travis.yml
│ │ │ │ ├── CONTRIBUTING.md
│ │ │ │ ├── LICENSE
│ │ │ │ ├── LICENSE.docs
│ │ │ │ ├── MAINTAINERS
│ │ │ │ ├── README.md
│ │ │ │ ├── algorithm.go
│ │ │ │ ├── digest.go
│ │ │ │ ├── digester.go
│ │ │ │ ├── doc.go
│ │ │ │ └── verifiers.go
│ │ │ ├── image-spec/
│ │ │ │ ├── LICENSE
│ │ │ │ ├── schema/
│ │ │ │ │ ├── LICENSE
│ │ │ │ │ ├── config-schema.json
│ │ │ │ │ ├── content-descriptor.json
│ │ │ │ │ ├── defs-descriptor.json
│ │ │ │ │ ├── defs.json
│ │ │ │ │ ├── doc.go
│ │ │ │ │ ├── error.go
│ │ │ │ │ ├── image-index-schema.json
│ │ │ │ │ ├── image-layout-schema.json
│ │ │ │ │ ├── image-manifest-schema.json
│ │ │ │ │ ├── schema.go
│ │ │ │ │ └── validator.go
│ │ │ │ └── specs-go/
│ │ │ │ ├── v1/
│ │ │ │ │ ├── annotations.go
│ │ │ │ │ ├── config.go
│ │ │ │ │ ├── descriptor.go
│ │ │ │ │ ├── index.go
│ │ │ │ │ ├── layout.go
│ │ │ │ │ ├── manifest.go
│ │ │ │ │ └── mediatype.go
│ │ │ │ ├── version.go
│ │ │ │ └── versioned.go
│ │ │ ├── image-tools/
│ │ │ │ ├── LICENSE
│ │ │ │ └── image/
│ │ │ │ ├── autodetect.go
│ │ │ │ ├── config.go
│ │ │ │ ├── descriptor.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── image.go
│ │ │ │ ├── index.go
│ │ │ │ ├── layout.go
│ │ │ │ ├── manifest.go
│ │ │ │ ├── project.go
│ │ │ │ └── walker.go
│ │ │ ├── runtime-spec/
│ │ │ │ ├── LICENSE
│ │ │ │ └── specs-go/
│ │ │ │ ├── config.go
│ │ │ │ ├── state.go
│ │ │ │ └── version.go
│ │ │ └── selinux/
│ │ │ ├── LICENSE
│ │ │ ├── go-selinux/
│ │ │ │ ├── doc.go
│ │ │ │ ├── label/
│ │ │ │ │ ├── label.go
│ │ │ │ │ ├── label_linux.go
│ │ │ │ │ └── label_stub.go
│ │ │ │ ├── selinux.go
│ │ │ │ ├── selinux_linux.go
│ │ │ │ ├── selinux_stub.go
│ │ │ │ └── xattrs_linux.go
│ │ │ └── pkg/
│ │ │ └── pwalkdir/
│ │ │ ├── README.md
│ │ │ └── pwalkdir.go
│ │ ├── pkg/
│ │ │ ├── browser/
│ │ │ │ ├── LICENSE
│ │ │ │ ├── README.md
│ │ │ │ ├── browser.go
│ │ │ │ ├── browser_darwin.go
│ │ │ │ ├── browser_freebsd.go
│ │ │ │ ├── browser_linux.go
│ │ │ │ ├── browser_netbsd.go
│ │ │ │ ├── browser_openbsd.go
│ │ │ │ ├── browser_unsupported.go
│ │ │ │ └── browser_windows.go
│ │ │ └── errors/
│ │ │ ├── .gitignore
│ │ │ ├── .travis.yml
│ │ │ ├── LICENSE
│ │ │ ├── Makefile
│ │ │ ├── README.md
│ │ │ ├── appveyor.yml
│ │ │ ├── errors.go
│ │ │ ├── go113.go
│ │ │ └── stack.go
│ │ ├── pmezard/
│ │ │ └── go-difflib/
│ │ │ ├── LICENSE
│ │ │ └── difflib/
│ │ │ └── difflib.go
│ │ ├── proglottis/
│ │ │ └── gpgme/
│ │ │ ├── .gitignore
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── data.go
│ │ │ ├── go_gpgme.c
│ │ │ ├── go_gpgme.h
│ │ │ ├── gpgme.go
│ │ │ ├── unset_agent_info.go
│ │ │ └── unset_agent_info_windows.go
│ │ ├── santhosh-tekuri/
│ │ │ └── jsonschema/
│ │ │ └── v6/
│ │ │ ├── .gitmodules
│ │ │ ├── .golangci.yml
│ │ │ ├── .pre-commit-hooks.yaml
│ │ │ ├── .swp
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── compiler.go
│ │ │ ├── content.go
│ │ │ ├── draft.go
│ │ │ ├── format.go
│ │ │ ├── go.work
│ │ │ ├── go.work.sum
│ │ │ ├── kind/
│ │ │ │ └── kind.go
│ │ │ ├── loader.go
│ │ │ ├── metaschemas/
│ │ │ │ ├── draft/
│ │ │ │ │ ├── 2019-09/
│ │ │ │ │ │ ├── meta/
│ │ │ │ │ │ │ ├── applicator
│ │ │ │ │ │ │ ├── content
│ │ │ │ │ │ │ ├── core
│ │ │ │ │ │ │ ├── format
│ │ │ │ │ │ │ ├── meta-data
│ │ │ │ │ │ │ └── validation
│ │ │ │ │ │ └── schema
│ │ │ │ │ └── 2020-12/
│ │ │ │ │ ├── meta/
│ │ │ │ │ │ ├── applicator
│ │ │ │ │ │ ├── content
│ │ │ │ │ │ ├── core
│ │ │ │ │ │ ├── format-annotation
│ │ │ │ │ │ ├── format-assertion
│ │ │ │ │ │ ├── meta-data
│ │ │ │ │ │ ├── unevaluated
│ │ │ │ │ │ └── validation
│ │ │ │ │ └── schema
│ │ │ │ ├── draft-04/
│ │ │ │ │ └── schema
│ │ │ │ ├── draft-06/
│ │ │ │ │ └── schema
│ │ │ │ └── draft-07/
│ │ │ │ └── schema
│ │ │ ├── objcompiler.go
│ │ │ ├── output.go
│ │ │ ├── position.go
│ │ │ ├── root.go
│ │ │ ├── roots.go
│ │ │ ├── schema.go
│ │ │ ├── util.go
│ │ │ ├── validator.go
│ │ │ └── vocab.go
│ │ ├── secure-systems-lab/
│ │ │ └── go-securesystemslib/
│ │ │ ├── LICENSE
│ │ │ └── encrypted/
│ │ │ └── encrypted.go
│ │ ├── sigstore/
│ │ │ ├── fulcio/
│ │ │ │ ├── COPYRIGHT.txt
│ │ │ │ ├── LICENSE
│ │ │ │ └── pkg/
│ │ │ │ ├── api/
│ │ │ │ │ └── client.go
│ │ │ │ └── certificate/
│ │ │ │ ├── doc.go
│ │ │ │ └── extensions.go
│ │ │ ├── protobuf-specs/
│ │ │ │ ├── COPYRIGHT.txt
│ │ │ │ ├── LICENSE
│ │ │ │ └── gen/
│ │ │ │ └── pb-go/
│ │ │ │ └── common/
│ │ │ │ └── v1/
│ │ │ │ └── sigstore_common.pb.go
│ │ │ └── sigstore/
│ │ │ ├── COPYRIGHT.txt
│ │ │ ├── LICENSE
│ │ │ └── pkg/
│ │ │ ├── cryptoutils/
│ │ │ │ ├── certificate.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── generic.go
│ │ │ │ ├── password.go
│ │ │ │ ├── privatekey.go
│ │ │ │ ├── publickey.go
│ │ │ │ ├── safestring.go
│ │ │ │ └── sans.go
│ │ │ ├── oauth/
│ │ │ │ ├── doc.go
│ │ │ │ └── interactive.go
│ │ │ ├── oauthflow/
│ │ │ │ ├── client_credentials.go
│ │ │ │ ├── device.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── flow.go
│ │ │ │ ├── interactive.go
│ │ │ │ └── pkce.go
│ │ │ └── signature/
│ │ │ ├── algorithm_registry.go
│ │ │ ├── doc.go
│ │ │ ├── ecdsa.go
│ │ │ ├── ed25519.go
│ │ │ ├── ed25519ph.go
│ │ │ ├── message.go
│ │ │ ├── options/
│ │ │ │ ├── context.go
│ │ │ │ ├── digest.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── keyversion.go
│ │ │ │ ├── loadoptions.go
│ │ │ │ ├── noop.go
│ │ │ │ ├── rand.go
│ │ │ │ ├── remoteverification.go
│ │ │ │ ├── rpcauth.go
│ │ │ │ └── signeropts.go
│ │ │ ├── options.go
│ │ │ ├── payload/
│ │ │ │ ├── doc.go
│ │ │ │ └── payload.go
│ │ │ ├── publickey.go
│ │ │ ├── rsapkcs1v15.go
│ │ │ ├── rsapss.go
│ │ │ ├── signer.go
│ │ │ ├── signerverifier.go
│ │ │ ├── util.go
│ │ │ └── verifier.go
│ │ ├── smallstep/
│ │ │ └── pkcs7/
│ │ │ ├── .gitignore
│ │ │ ├── LICENSE
│ │ │ ├── Makefile
│ │ │ ├── README.md
│ │ │ ├── ber.go
│ │ │ ├── decrypt.go
│ │ │ ├── encrypt.go
│ │ │ ├── internal/
│ │ │ │ └── legacy/
│ │ │ │ └── x509/
│ │ │ │ ├── debug.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── oid.go
│ │ │ │ ├── parser.go
│ │ │ │ ├── pkcs1.go
│ │ │ │ ├── verify.go
│ │ │ │ └── x509.go
│ │ │ ├── pkcs7.go
│ │ │ ├── sign.go
│ │ │ └── verify.go
│ │ ├── spf13/
│ │ │ ├── cobra/
│ │ │ │ ├── .gitignore
│ │ │ │ ├── .golangci.yml
│ │ │ │ ├── .mailmap
│ │ │ │ ├── CONDUCT.md
│ │ │ │ ├── CONTRIBUTING.md
│ │ │ │ ├── LICENSE.txt
│ │ │ │ ├── MAINTAINERS
│ │ │ │ ├── Makefile
│ │ │ │ ├── README.md
│ │ │ │ ├── SECURITY.md
│ │ │ │ ├── active_help.go
│ │ │ │ ├── args.go
│ │ │ │ ├── bash_completions.go
│ │ │ │ ├── bash_completionsV2.go
│ │ │ │ ├── cobra.go
│ │ │ │ ├── command.go
│ │ │ │ ├── command_notwin.go
│ │ │ │ ├── command_win.go
│ │ │ │ ├── completions.go
│ │ │ │ ├── fish_completions.go
│ │ │ │ ├── flag_groups.go
│ │ │ │ ├── powershell_completions.go
│ │ │ │ ├── shell_completions.go
│ │ │ │ └── zsh_completions.go
│ │ │ └── pflag/
│ │ │ ├── .editorconfig
│ │ │ ├── .gitignore
│ │ │ ├── .golangci.yaml
│ │ │ ├── .travis.yml
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── bool.go
│ │ │ ├── bool_func.go
│ │ │ ├── bool_slice.go
│ │ │ ├── bytes.go
│ │ │ ├── count.go
│ │ │ ├── duration.go
│ │ │ ├── duration_slice.go
│ │ │ ├── errors.go
│ │ │ ├── flag.go
│ │ │ ├── float32.go
│ │ │ ├── float32_slice.go
│ │ │ ├── float64.go
│ │ │ ├── float64_slice.go
│ │ │ ├── func.go
│ │ │ ├── golangflag.go
│ │ │ ├── int.go
│ │ │ ├── int16.go
│ │ │ ├── int32.go
│ │ │ ├── int32_slice.go
│ │ │ ├── int64.go
│ │ │ ├── int64_slice.go
│ │ │ ├── int8.go
│ │ │ ├── int_slice.go
│ │ │ ├── ip.go
│ │ │ ├── ip_slice.go
│ │ │ ├── ipmask.go
│ │ │ ├── ipnet.go
│ │ │ ├── ipnet_slice.go
│ │ │ ├── string.go
│ │ │ ├── string_array.go
│ │ │ ├── string_slice.go
│ │ │ ├── string_to_int.go
│ │ │ ├── string_to_int64.go
│ │ │ ├── string_to_string.go
│ │ │ ├── text.go
│ │ │ ├── time.go
│ │ │ ├── uint.go
│ │ │ ├── uint16.go
│ │ │ ├── uint32.go
│ │ │ ├── uint64.go
│ │ │ ├── uint8.go
│ │ │ └── uint_slice.go
│ │ ├── stefanberger/
│ │ │ └── go-pkcs11uri/
│ │ │ ├── .gitignore
│ │ │ ├── .travis.yml
│ │ │ ├── LICENSE
│ │ │ ├── Makefile
│ │ │ ├── README.md
│ │ │ └── pkcs11uri.go
│ │ ├── stretchr/
│ │ │ └── testify/
│ │ │ ├── LICENSE
│ │ │ ├── assert/
│ │ │ │ ├── assertion_compare.go
│ │ │ │ ├── assertion_format.go
│ │ │ │ ├── assertion_format.go.tmpl
│ │ │ │ ├── assertion_forward.go
│ │ │ │ ├── assertion_forward.go.tmpl
│ │ │ │ ├── assertion_order.go
│ │ │ │ ├── assertions.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── errors.go
│ │ │ │ ├── forward_assertions.go
│ │ │ │ ├── http_assertions.go
│ │ │ │ └── yaml/
│ │ │ │ ├── yaml_custom.go
│ │ │ │ ├── yaml_default.go
│ │ │ │ └── yaml_fail.go
│ │ │ ├── require/
│ │ │ │ ├── doc.go
│ │ │ │ ├── forward_requirements.go
│ │ │ │ ├── require.go
│ │ │ │ ├── require.go.tmpl
│ │ │ │ ├── require_forward.go
│ │ │ │ ├── require_forward.go.tmpl
│ │ │ │ └── requirements.go
│ │ │ └── suite/
│ │ │ ├── doc.go
│ │ │ ├── interfaces.go
│ │ │ ├── stats.go
│ │ │ └── suite.go
│ │ ├── sylabs/
│ │ │ └── sif/
│ │ │ └── v2/
│ │ │ ├── LICENSE.md
│ │ │ └── pkg/
│ │ │ └── sif/
│ │ │ ├── add.go
│ │ │ ├── arch.go
│ │ │ ├── buffer.go
│ │ │ ├── create.go
│ │ │ ├── delete.go
│ │ │ ├── descriptor.go
│ │ │ ├── descriptor_input.go
│ │ │ ├── load.go
│ │ │ ├── select.go
│ │ │ ├── set.go
│ │ │ └── sif.go
│ │ ├── tchap/
│ │ │ └── go-patricia/
│ │ │ └── v2/
│ │ │ ├── AUTHORS
│ │ │ ├── LICENSE
│ │ │ └── patricia/
│ │ │ ├── children.go
│ │ │ └── patricia.go
│ │ ├── ulikunitz/
│ │ │ └── xz/
│ │ │ ├── .gitignore
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── SECURITY.md
│ │ │ ├── TODO.md
│ │ │ ├── bits.go
│ │ │ ├── crc.go
│ │ │ ├── format.go
│ │ │ ├── fox-check-none.xz
│ │ │ ├── fox.xz
│ │ │ ├── internal/
│ │ │ │ ├── hash/
│ │ │ │ │ ├── cyclic_poly.go
│ │ │ │ │ ├── doc.go
│ │ │ │ │ ├── rabin_karp.go
│ │ │ │ │ └── roller.go
│ │ │ │ └── xlog/
│ │ │ │ └── xlog.go
│ │ │ ├── lzma/
│ │ │ │ ├── bintree.go
│ │ │ │ ├── bitops.go
│ │ │ │ ├── breader.go
│ │ │ │ ├── buffer.go
│ │ │ │ ├── bytewriter.go
│ │ │ │ ├── decoder.go
│ │ │ │ ├── decoderdict.go
│ │ │ │ ├── directcodec.go
│ │ │ │ ├── distcodec.go
│ │ │ │ ├── encoder.go
│ │ │ │ ├── encoderdict.go
│ │ │ │ ├── fox.lzma
│ │ │ │ ├── hashtable.go
│ │ │ │ ├── header.go
│ │ │ │ ├── header2.go
│ │ │ │ ├── lengthcodec.go
│ │ │ │ ├── literalcodec.go
│ │ │ │ ├── matchalgorithm.go
│ │ │ │ ├── operation.go
│ │ │ │ ├── prob.go
│ │ │ │ ├── properties.go
│ │ │ │ ├── rangecodec.go
│ │ │ │ ├── reader.go
│ │ │ │ ├── reader2.go
│ │ │ │ ├── state.go
│ │ │ │ ├── treecodecs.go
│ │ │ │ ├── writer.go
│ │ │ │ └── writer2.go
│ │ │ ├── lzmafilter.go
│ │ │ ├── make-docs
│ │ │ ├── none-check.go
│ │ │ ├── reader.go
│ │ │ └── writer.go
│ │ ├── vbatts/
│ │ │ └── tar-split/
│ │ │ ├── LICENSE
│ │ │ ├── archive/
│ │ │ │ └── tar/
│ │ │ │ ├── common.go
│ │ │ │ ├── format.go
│ │ │ │ ├── reader.go
│ │ │ │ ├── stat_actime1.go
│ │ │ │ ├── stat_actime2.go
│ │ │ │ ├── stat_unix.go
│ │ │ │ ├── strconv.go
│ │ │ │ └── writer.go
│ │ │ └── tar/
│ │ │ ├── asm/
│ │ │ │ ├── README.md
│ │ │ │ ├── assemble.go
│ │ │ │ ├── disassemble.go
│ │ │ │ ├── doc.go
│ │ │ │ └── iterate.go
│ │ │ └── storage/
│ │ │ ├── doc.go
│ │ │ ├── entry.go
│ │ │ ├── getter.go
│ │ │ └── packer.go
│ │ └── vbauerster/
│ │ └── mpb/
│ │ └── v8/
│ │ ├── .gitignore
│ │ ├── CONTRIBUTING
│ │ ├── README.md
│ │ ├── UNLICENSE
│ │ ├── bar.go
│ │ ├── bar_filler.go
│ │ ├── bar_filler_bar.go
│ │ ├── bar_filler_nop.go
│ │ ├── bar_filler_spinner.go
│ │ ├── bar_heap.go
│ │ ├── bar_option.go
│ │ ├── container_option.go
│ │ ├── cwriter/
│ │ │ ├── doc.go
│ │ │ ├── util_bsd.go
│ │ │ ├── util_linux.go
│ │ │ ├── util_solaris.go
│ │ │ ├── util_zos.go
│ │ │ ├── writer.go
│ │ │ ├── writer_posix.go
│ │ │ └── writer_windows.go
│ │ ├── decor/
│ │ │ ├── any.go
│ │ │ ├── counters.go
│ │ │ ├── decorator.go
│ │ │ ├── doc.go
│ │ │ ├── elapsed.go
│ │ │ ├── eta.go
│ │ │ ├── meta.go
│ │ │ ├── moving_average.go
│ │ │ ├── name.go
│ │ │ ├── on_abort.go
│ │ │ ├── on_abort_or_on_complete.go
│ │ │ ├── on_complete.go
│ │ │ ├── on_complete_or_on_abort.go
│ │ │ ├── on_condition.go
│ │ │ ├── percentage.go
│ │ │ ├── size_type.go
│ │ │ ├── sizeb1000_string.go
│ │ │ ├── sizeb1024_string.go
│ │ │ ├── speed.go
│ │ │ └── spinner.go
│ │ ├── doc.go
│ │ ├── heap_manager.go
│ │ ├── internal/
│ │ │ ├── percentage.go
│ │ │ └── width.go
│ │ ├── progress.go
│ │ ├── proxyreader.go
│ │ └── proxywriter.go
│ ├── go.opentelemetry.io/
│ │ ├── auto/
│ │ │ └── sdk/
│ │ │ ├── CONTRIBUTING.md
│ │ │ ├── LICENSE
│ │ │ ├── VERSIONING.md
│ │ │ ├── doc.go
│ │ │ ├── internal/
│ │ │ │ └── telemetry/
│ │ │ │ ├── attr.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── id.go
│ │ │ │ ├── number.go
│ │ │ │ ├── resource.go
│ │ │ │ ├── scope.go
│ │ │ │ ├── span.go
│ │ │ │ ├── status.go
│ │ │ │ ├── traces.go
│ │ │ │ └── value.go
│ │ │ ├── limit.go
│ │ │ ├── span.go
│ │ │ ├── tracer.go
│ │ │ └── tracer_provider.go
│ │ ├── contrib/
│ │ │ └── instrumentation/
│ │ │ └── net/
│ │ │ └── http/
│ │ │ └── otelhttp/
│ │ │ ├── LICENSE
│ │ │ ├── common.go
│ │ │ ├── config.go
│ │ │ ├── doc.go
│ │ │ ├── handler.go
│ │ │ ├── internal/
│ │ │ │ ├── request/
│ │ │ │ │ ├── body_wrapper.go
│ │ │ │ │ ├── gen.go
│ │ │ │ │ └── resp_writer_wrapper.go
│ │ │ │ └── semconv/
│ │ │ │ ├── client.go
│ │ │ │ ├── gen.go
│ │ │ │ ├── server.go
│ │ │ │ └── util.go
│ │ │ ├── labeler.go
│ │ │ ├── start_time_context.go
│ │ │ ├── transport.go
│ │ │ └── version.go
│ │ └── otel/
│ │ ├── .clomonitor.yml
│ │ ├── .codespellignore
│ │ ├── .codespellrc
│ │ ├── .gitattributes
│ │ ├── .gitignore
│ │ ├── .golangci.yml
│ │ ├── .lycheeignore
│ │ ├── .markdownlint.yaml
│ │ ├── CHANGELOG.md
│ │ ├── CODEOWNERS
│ │ ├── CONTRIBUTING.md
│ │ ├── LICENSE
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── RELEASING.md
│ │ ├── SECURITY-INSIGHTS.yml
│ │ ├── VERSIONING.md
│ │ ├── attribute/
│ │ │ ├── README.md
│ │ │ ├── doc.go
│ │ │ ├── encoder.go
│ │ │ ├── filter.go
│ │ │ ├── hash.go
│ │ │ ├── internal/
│ │ │ │ ├── attribute.go
│ │ │ │ └── xxhash/
│ │ │ │ └── xxhash.go
│ │ │ ├── iterator.go
│ │ │ ├── key.go
│ │ │ ├── kv.go
│ │ │ ├── rawhelpers.go
│ │ │ ├── set.go
│ │ │ ├── type_string.go
│ │ │ └── value.go
│ │ ├── baggage/
│ │ │ ├── README.md
│ │ │ ├── baggage.go
│ │ │ ├── context.go
│ │ │ └── doc.go
│ │ ├── codes/
│ │ │ ├── README.md
│ │ │ ├── codes.go
│ │ │ └── doc.go
│ │ ├── dependencies.Dockerfile
│ │ ├── doc.go
│ │ ├── error_handler.go
│ │ ├── handler.go
│ │ ├── internal/
│ │ │ ├── baggage/
│ │ │ │ ├── baggage.go
│ │ │ │ └── context.go
│ │ │ └── global/
│ │ │ ├── handler.go
│ │ │ ├── instruments.go
│ │ │ ├── internal_logging.go
│ │ │ ├── meter.go
│ │ │ ├── propagator.go
│ │ │ ├── state.go
│ │ │ └── trace.go
│ │ ├── internal_logging.go
│ │ ├── metric/
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── asyncfloat64.go
│ │ │ ├── asyncint64.go
│ │ │ ├── config.go
│ │ │ ├── doc.go
│ │ │ ├── embedded/
│ │ │ │ ├── README.md
│ │ │ │ └── embedded.go
│ │ │ ├── instrument.go
│ │ │ ├── meter.go
│ │ │ ├── noop/
│ │ │ │ ├── README.md
│ │ │ │ └── noop.go
│ │ │ ├── syncfloat64.go
│ │ │ └── syncint64.go
│ │ ├── metric.go
│ │ ├── propagation/
│ │ │ ├── README.md
│ │ │ ├── baggage.go
│ │ │ ├── doc.go
│ │ │ ├── propagation.go
│ │ │ └── trace_context.go
│ │ ├── propagation.go
│ │ ├── renovate.json
│ │ ├── requirements.txt
│ │ ├── semconv/
│ │ │ ├── v1.37.0/
│ │ │ │ ├── MIGRATION.md
│ │ │ │ ├── README.md
│ │ │ │ ├── attribute_group.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── error_type.go
│ │ │ │ ├── exception.go
│ │ │ │ └── schema.go
│ │ │ └── v1.39.0/
│ │ │ ├── MIGRATION.md
│ │ │ ├── README.md
│ │ │ ├── attribute_group.go
│ │ │ ├── doc.go
│ │ │ ├── error_type.go
│ │ │ ├── exception.go
│ │ │ ├── httpconv/
│ │ │ │ └── metric.go
│ │ │ └── schema.go
│ │ ├── trace/
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── auto.go
│ │ │ ├── config.go
│ │ │ ├── context.go
│ │ │ ├── doc.go
│ │ │ ├── embedded/
│ │ │ │ ├── README.md
│ │ │ │ └── embedded.go
│ │ │ ├── hex.go
│ │ │ ├── internal/
│ │ │ │ └── telemetry/
│ │ │ │ ├── attr.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── id.go
│ │ │ │ ├── number.go
│ │ │ │ ├── resource.go
│ │ │ │ ├── scope.go
│ │ │ │ ├── span.go
│ │ │ │ ├── status.go
│ │ │ │ ├── traces.go
│ │ │ │ └── value.go
│ │ │ ├── nonrecording.go
│ │ │ ├── noop/
│ │ │ │ ├── README.md
│ │ │ │ └── noop.go
│ │ │ ├── noop.go
│ │ │ ├── provider.go
│ │ │ ├── span.go
│ │ │ ├── trace.go
│ │ │ ├── tracer.go
│ │ │ └── tracestate.go
│ │ ├── trace.go
│ │ ├── verify_released_changelog.sh
│ │ ├── version.go
│ │ └── versions.yaml
│ ├── go.podman.io/
│ │ ├── common/
│ │ │ ├── LICENSE
│ │ │ └── pkg/
│ │ │ ├── auth/
│ │ │ │ ├── auth.go
│ │ │ │ └── cli.go
│ │ │ ├── capabilities/
│ │ │ │ └── capabilities.go
│ │ │ ├── completion/
│ │ │ │ └── completion.go
│ │ │ ├── flag/
│ │ │ │ └── flag.go
│ │ │ ├── json-proxy/
│ │ │ │ ├── handler.go
│ │ │ │ ├── proxy.go
│ │ │ │ ├── proxy_unix.go
│ │ │ │ ├── types.go
│ │ │ │ ├── types_unix.go
│ │ │ │ └── utils.go
│ │ │ ├── password/
│ │ │ │ ├── password_supported.go
│ │ │ │ └── password_windows.go
│ │ │ ├── report/
│ │ │ │ ├── camelcase/
│ │ │ │ │ ├── LICENSE.md
│ │ │ │ │ ├── README.md
│ │ │ │ │ └── camelcase.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── formatter.go
│ │ │ │ ├── template.go
│ │ │ │ ├── validate.go
│ │ │ │ └── writer.go
│ │ │ └── retry/
│ │ │ ├── retry.go
│ │ │ ├── retry_linux.go
│ │ │ └── retry_unsupported.go
│ │ ├── image/
│ │ │ └── v5/
│ │ │ ├── LICENSE
│ │ │ ├── copy/
│ │ │ │ ├── blob.go
│ │ │ │ ├── compression.go
│ │ │ │ ├── copy.go
│ │ │ │ ├── digesting_reader.go
│ │ │ │ ├── encryption.go
│ │ │ │ ├── manifest.go
│ │ │ │ ├── multiple.go
│ │ │ │ ├── progress_bars.go
│ │ │ │ ├── progress_channel.go
│ │ │ │ ├── sign.go
│ │ │ │ └── single.go
│ │ │ ├── directory/
│ │ │ │ ├── directory_dest.go
│ │ │ │ ├── directory_src.go
│ │ │ │ ├── directory_transport.go
│ │ │ │ ├── explicitfilepath/
│ │ │ │ │ └── path.go
│ │ │ │ └── version.go
│ │ │ ├── docker/
│ │ │ │ ├── archive/
│ │ │ │ │ ├── dest.go
│ │ │ │ │ ├── reader.go
│ │ │ │ │ ├── src.go
│ │ │ │ │ ├── transport.go
│ │ │ │ │ └── writer.go
│ │ │ │ ├── body_reader.go
│ │ │ │ ├── cache.go
│ │ │ │ ├── daemon/
│ │ │ │ │ ├── client.go
│ │ │ │ │ ├── daemon_dest.go
│ │ │ │ │ ├── daemon_src.go
│ │ │ │ │ └── daemon_transport.go
│ │ │ │ ├── distribution_error.go
│ │ │ │ ├── docker_client.go
│ │ │ │ ├── docker_image.go
│ │ │ │ ├── docker_image_dest.go
│ │ │ │ ├── docker_image_src.go
│ │ │ │ ├── docker_transport.go
│ │ │ │ ├── errors.go
│ │ │ │ ├── internal/
│ │ │ │ │ └── tarfile/
│ │ │ │ │ ├── dest.go
│ │ │ │ │ ├── reader.go
│ │ │ │ │ ├── src.go
│ │ │ │ │ ├── types.go
│ │ │ │ │ └── writer.go
│ │ │ │ ├── paths_common.go
│ │ │ │ ├── paths_freebsd.go
│ │ │ │ ├── policyconfiguration/
│ │ │ │ │ └── naming.go
│ │ │ │ ├── reference/
│ │ │ │ │ ├── README.md
│ │ │ │ │ ├── helpers.go
│ │ │ │ │ ├── normalize.go
│ │ │ │ │ ├── reference.go
│ │ │ │ │ ├── regexp-additions.go
│ │ │ │ │ └── regexp.go
│ │ │ │ ├── registries_d.go
│ │ │ │ └── wwwauthenticate.go
│ │ │ ├── image/
│ │ │ │ ├── docker_schema2.go
│ │ │ │ ├── sourced.go
│ │ │ │ └── unparsed.go
│ │ │ ├── internal/
│ │ │ │ ├── blobinfocache/
│ │ │ │ │ ├── blobinfocache.go
│ │ │ │ │ └── types.go
│ │ │ │ ├── digests/
│ │ │ │ │ └── digests.go
│ │ │ │ ├── image/
│ │ │ │ │ ├── digest_validation.go
│ │ │ │ │ ├── docker_list.go
│ │ │ │ │ ├── docker_schema1.go
│ │ │ │ │ ├── docker_schema2.go
│ │ │ │ │ ├── manifest.go
│ │ │ │ │ ├── memory.go
│ │ │ │ │ ├── oci.go
│ │ │ │ │ ├── oci_index.go
│ │ │ │ │ ├── sourced.go
│ │ │ │ │ └── unparsed.go
│ │ │ │ ├── imagedestination/
│ │ │ │ │ ├── impl/
│ │ │ │ │ │ ├── compat.go
│ │ │ │ │ │ ├── helpers.go
│ │ │ │ │ │ └── properties.go
│ │ │ │ │ ├── stubs/
│ │ │ │ │ │ ├── original_oci_config.go
│ │ │ │ │ │ ├── put_blob_partial.go
│ │ │ │ │ │ ├── signatures.go
│ │ │ │ │ │ └── stubs.go
│ │ │ │ │ └── wrapper.go
│ │ │ │ ├── imagesource/
│ │ │ │ │ ├── impl/
│ │ │ │ │ │ ├── compat.go
│ │ │ │ │ │ ├── layer_infos.go
│ │ │ │ │ │ ├── properties.go
│ │ │ │ │ │ └── signatures.go
│ │ │ │ │ ├── stubs/
│ │ │ │ │ │ ├── get_blob_at.go
│ │ │ │ │ │ └── stubs.go
│ │ │ │ │ └── wrapper.go
│ │ │ │ ├── iolimits/
│ │ │ │ │ └── iolimits.go
│ │ │ │ ├── manifest/
│ │ │ │ │ ├── common.go
│ │ │ │ │ ├── docker_schema2.go
│ │ │ │ │ ├── docker_schema2_list.go
│ │ │ │ │ ├── errors.go
│ │ │ │ │ ├── list.go
│ │ │ │ │ ├── manifest.go
│ │ │ │ │ └── oci_index.go
│ │ │ │ ├── multierr/
│ │ │ │ │ └── multierr.go
│ │ │ │ ├── pkg/
│ │ │ │ │ └── platform/
│ │ │ │ │ └── platform_matcher.go
│ │ │ │ ├── private/
│ │ │ │ │ └── private.go
│ │ │ │ ├── putblobdigest/
│ │ │ │ │ └── put_blob_digest.go
│ │ │ │ ├── rootless/
│ │ │ │ │ └── rootless.go
│ │ │ │ ├── set/
│ │ │ │ │ └── set.go
│ │ │ │ ├── signature/
│ │ │ │ │ ├── signature.go
│ │ │ │ │ ├── sigstore.go
│ │ │ │ │ └── simple.go
│ │ │ │ ├── signer/
│ │ │ │ │ └── signer.go
│ │ │ │ ├── streamdigest/
│ │ │ │ │ └── stream_digest.go
│ │ │ │ ├── tmpdir/
│ │ │ │ │ └── tmpdir.go
│ │ │ │ ├── unparsedimage/
│ │ │ │ │ └── wrapper.go
│ │ │ │ ├── uploadreader/
│ │ │ │ │ └── upload_reader.go
│ │ │ │ └── useragent/
│ │ │ │ └── useragent.go
│ │ │ ├── manifest/
│ │ │ │ ├── common.go
│ │ │ │ ├── docker_schema1.go
│ │ │ │ ├── docker_schema2.go
│ │ │ │ ├── docker_schema2_list.go
│ │ │ │ ├── list.go
│ │ │ │ ├── manifest.go
│ │ │ │ ├── oci.go
│ │ │ │ └── oci_index.go
│ │ │ ├── oci/
│ │ │ │ ├── archive/
│ │ │ │ │ ├── oci_dest.go
│ │ │ │ │ ├── oci_src.go
│ │ │ │ │ └── oci_transport.go
│ │ │ │ ├── internal/
│ │ │ │ │ └── oci_util.go
│ │ │ │ └── layout/
│ │ │ │ ├── oci_delete.go
│ │ │ │ ├── oci_dest.go
│ │ │ │ ├── oci_src.go
│ │ │ │ ├── oci_transport.go
│ │ │ │ └── reader.go
│ │ │ ├── openshift/
│ │ │ │ ├── openshift-copies.go
│ │ │ │ ├── openshift.go
│ │ │ │ ├── openshift_dest.go
│ │ │ │ ├── openshift_src.go
│ │ │ │ └── openshift_transport.go
│ │ │ ├── pkg/
│ │ │ │ ├── blobinfocache/
│ │ │ │ │ ├── default.go
│ │ │ │ │ ├── internal/
│ │ │ │ │ │ └── prioritize/
│ │ │ │ │ │ └── prioritize.go
│ │ │ │ │ ├── memory/
│ │ │ │ │ │ └── memory.go
│ │ │ │ │ ├── none/
│ │ │ │ │ │ └── none.go
│ │ │ │ │ └── sqlite/
│ │ │ │ │ └── sqlite.go
│ │ │ │ ├── cli/
│ │ │ │ │ ├── basetls/
│ │ │ │ │ │ ├── basetls.go
│ │ │ │ │ │ └── tlsdetails/
│ │ │ │ │ │ └── tlsdetails.go
│ │ │ │ │ ├── passphrase.go
│ │ │ │ │ └── sigstore/
│ │ │ │ │ ├── params/
│ │ │ │ │ │ └── sigstore.go
│ │ │ │ │ └── sigstore.go
│ │ │ │ ├── compression/
│ │ │ │ │ ├── compression.go
│ │ │ │ │ ├── internal/
│ │ │ │ │ │ └── types.go
│ │ │ │ │ ├── types/
│ │ │ │ │ │ └── types.go
│ │ │ │ │ └── zstd.go
│ │ │ │ ├── docker/
│ │ │ │ │ └── config/
│ │ │ │ │ └── config.go
│ │ │ │ ├── strslice/
│ │ │ │ │ ├── README.md
│ │ │ │ │ └── strslice.go
│ │ │ │ ├── sysregistriesv2/
│ │ │ │ │ ├── paths_common.go
│ │ │ │ │ ├── paths_freebsd.go
│ │ │ │ │ ├── shortnames.go
│ │ │ │ │ └── system_registries_v2.go
│ │ │ │ └── tlsclientconfig/
│ │ │ │ └── tlsclientconfig.go
│ │ │ ├── sif/
│ │ │ │ ├── load.go
│ │ │ │ ├── src.go
│ │ │ │ └── transport.go
│ │ │ ├── signature/
│ │ │ │ ├── docker.go
│ │ │ │ ├── fulcio_cert.go
│ │ │ │ ├── internal/
│ │ │ │ │ ├── errors.go
│ │ │ │ │ ├── json.go
│ │ │ │ │ ├── rekor_api_types.go
│ │ │ │ │ ├── rekor_set.go
│ │ │ │ │ ├── sequoia/
│ │ │ │ │ │ ├── gosequoia.c
│ │ │ │ │ │ ├── gosequoia.h
│ │ │ │ │ │ ├── gosequoiafuncs.h
│ │ │ │ │ │ ├── sequoia.go
│ │ │ │ │ │ └── sequoia.h
│ │ │ │ │ └── sigstore_payload.go
│ │ │ │ ├── mechanism.go
│ │ │ │ ├── mechanism_gpgme.go
│ │ │ │ ├── mechanism_gpgme_only.go
│ │ │ │ ├── mechanism_openpgp.go
│ │ │ │ ├── mechanism_sequoia.go
│ │ │ │ ├── pki_cert.go
│ │ │ │ ├── policy_config.go
│ │ │ │ ├── policy_config_sigstore.go
│ │ │ │ ├── policy_eval.go
│ │ │ │ ├── policy_eval_baselayer.go
│ │ │ │ ├── policy_eval_signedby.go
│ │ │ │ ├── policy_eval_sigstore.go
│ │ │ │ ├── policy_eval_simple.go
│ │ │ │ ├── policy_paths_common.go
│ │ │ │ ├── policy_paths_freebsd.go
│ │ │ │ ├── policy_reference_match.go
│ │ │ │ ├── policy_types.go
│ │ │ │ ├── signer/
│ │ │ │ │ └── signer.go
│ │ │ │ ├── sigstore/
│ │ │ │ │ ├── copied.go
│ │ │ │ │ ├── fulcio/
│ │ │ │ │ │ └── fulcio.go
│ │ │ │ │ ├── generate.go
│ │ │ │ │ ├── internal/
│ │ │ │ │ │ └── signer.go
│ │ │ │ │ ├── rekor/
│ │ │ │ │ │ ├── leveled_logger.go
│ │ │ │ │ │ ├── openapi_infra.go
│ │ │ │ │ │ ├── rekor.go
│ │ │ │ │ │ ├── rekor_api.go
│ │ │ │ │ │ └── rekor_api_types.go
│ │ │ │ │ └── signer.go
│ │ │ │ ├── simple.go
│ │ │ │ ├── simplesequoia/
│ │ │ │ │ ├── mechanism.go
│ │ │ │ │ ├── options.go
│ │ │ │ │ ├── signer.go
│ │ │ │ │ └── signer_stub.go
│ │ │ │ └── simplesigning/
│ │ │ │ └── signer.go
│ │ │ ├── storage/
│ │ │ │ ├── storage_dest.go
│ │ │ │ ├── storage_image.go
│ │ │ │ ├── storage_reference.go
│ │ │ │ ├── storage_src.go
│ │ │ │ └── storage_transport.go
│ │ │ ├── tarball/
│ │ │ │ ├── doc.go
│ │ │ │ ├── tarball_reference.go
│ │ │ │ ├── tarball_src.go
│ │ │ │ └── tarball_transport.go
│ │ │ ├── transports/
│ │ │ │ ├── alltransports/
│ │ │ │ │ ├── alltransports.go
│ │ │ │ │ ├── docker_daemon.go
│ │ │ │ │ ├── docker_daemon_stub.go
│ │ │ │ │ ├── storage.go
│ │ │ │ │ └── storage_stub.go
│ │ │ │ ├── stub.go
│ │ │ │ └── transports.go
│ │ │ ├── types/
│ │ │ │ └── types.go
│ │ │ └── version/
│ │ │ └── version.go
│ │ └── storage/
│ │ ├── .dockerignore
│ │ ├── .gitignore
│ │ ├── .golangci.yml
│ │ ├── .mailmap
│ │ ├── AUTHORS
│ │ ├── LICENSE
│ │ ├── Makefile
│ │ ├── NOTICE
│ │ ├── OWNERS
│ │ ├── README.md
│ │ ├── VERSION
│ │ ├── check.go
│ │ ├── containers.go
│ │ ├── deprecated.go
│ │ ├── drivers/
│ │ │ ├── btrfs/
│ │ │ │ ├── btrfs.go
│ │ │ │ ├── dummy_unsupported.go
│ │ │ │ └── version.go
│ │ │ ├── chown.go
│ │ │ ├── chown_darwin.go
│ │ │ ├── chown_unix.go
│ │ │ ├── chown_windows.go
│ │ │ ├── chroot_unix.go
│ │ │ ├── chroot_windows.go
│ │ │ ├── copy/
│ │ │ │ ├── copy_linux.go
│ │ │ │ └── copy_unsupported.go
│ │ │ ├── counter.go
│ │ │ ├── driver.go
│ │ │ ├── driver_darwin.go
│ │ │ ├── driver_freebsd.go
│ │ │ ├── driver_linux.go
│ │ │ ├── driver_solaris.go
│ │ │ ├── driver_unsupported.go
│ │ │ ├── fsdiff.go
│ │ │ ├── jsoniter.go
│ │ │ ├── overlay/
│ │ │ │ ├── check.go
│ │ │ │ ├── check_116.go
│ │ │ │ ├── composefs.go
│ │ │ │ ├── jsoniter.go
│ │ │ │ ├── mount.go
│ │ │ │ ├── overlay.go
│ │ │ │ ├── overlay_disk_quota.go
│ │ │ │ ├── overlay_disk_quota_unsupported.go
│ │ │ │ ├── overlay_unsupported.go
│ │ │ │ └── randomid.go
│ │ │ ├── overlayutils/
│ │ │ │ └── overlayutils.go
│ │ │ ├── quota/
│ │ │ │ ├── projectquota.go
│ │ │ │ ├── projectquota_supported.go
│ │ │ │ └── projectquota_unsupported.go
│ │ │ ├── register/
│ │ │ │ ├── register_btrfs.go
│ │ │ │ ├── register_overlay.go
│ │ │ │ ├── register_vfs.go
│ │ │ │ └── register_zfs.go
│ │ │ ├── vfs/
│ │ │ │ ├── copy_linux.go
│ │ │ │ ├── copy_unsupported.go
│ │ │ │ └── driver.go
│ │ │ └── zfs/
│ │ │ ├── MAINTAINERS
│ │ │ ├── zfs.go
│ │ │ ├── zfs_freebsd.go
│ │ │ ├── zfs_linux.go
│ │ │ └── zfs_unsupported.go
│ │ ├── errors.go
│ │ ├── idset.go
│ │ ├── images.go
│ │ ├── internal/
│ │ │ ├── dedup/
│ │ │ │ ├── dedup.go
│ │ │ │ ├── dedup_linux.go
│ │ │ │ └── dedup_unsupported.go
│ │ │ ├── rawfilelock/
│ │ │ │ ├── rawfilelock.go
│ │ │ │ ├── rawfilelock_unix.go
│ │ │ │ └── rawfilelock_windows.go
│ │ │ ├── staging_lockfile/
│ │ │ │ └── staging_lockfile.go
│ │ │ └── tempdir/
│ │ │ └── tempdir.go
│ │ ├── jsoniter.go
│ │ ├── layers.go
│ │ ├── lockfile_compat.go
│ │ ├── pkg/
│ │ │ ├── archive/
│ │ │ │ ├── README.md
│ │ │ │ ├── archive.go
│ │ │ │ ├── archive_110.go
│ │ │ │ ├── archive_19.go
│ │ │ │ ├── archive_bsd.go
│ │ │ │ ├── archive_linux.go
│ │ │ │ ├── archive_other.go
│ │ │ │ ├── archive_unix.go
│ │ │ │ ├── archive_windows.go
│ │ │ │ ├── archive_zstd.go
│ │ │ │ ├── changes.go
│ │ │ │ ├── changes_linux.go
│ │ │ │ ├── changes_other.go
│ │ │ │ ├── changes_unix.go
│ │ │ │ ├── changes_windows.go
│ │ │ │ ├── copy.go
│ │ │ │ ├── copy_unix.go
│ │ │ │ ├── copy_windows.go
│ │ │ │ ├── diff.go
│ │ │ │ ├── fflags_bsd.go
│ │ │ │ ├── fflags_unsupported.go
│ │ │ │ ├── filter.go
│ │ │ │ ├── time_linux.go
│ │ │ │ ├── time_unsupported.go
│ │ │ │ ├── whiteouts.go
│ │ │ │ └── wrap.go
│ │ │ ├── chrootarchive/
│ │ │ │ ├── archive.go
│ │ │ │ ├── archive_darwin.go
│ │ │ │ ├── archive_unix.go
│ │ │ │ ├── archive_windows.go
│ │ │ │ ├── chroot_linux.go
│ │ │ │ ├── chroot_unix.go
│ │ │ │ ├── diff.go
│ │ │ │ ├── diff_darwin.go
│ │ │ │ ├── diff_unix.go
│ │ │ │ ├── diff_windows.go
│ │ │ │ ├── init_unix.go
│ │ │ │ └── jsoniter.go
│ │ │ ├── chunked/
│ │ │ │ ├── bloom_filter_linux.go
│ │ │ │ ├── cache_linux.go
│ │ │ │ ├── compression.go
│ │ │ │ ├── compression_linux.go
│ │ │ │ ├── compressor/
│ │ │ │ │ ├── compressor.go
│ │ │ │ │ └── rollsum.go
│ │ │ │ ├── dump/
│ │ │ │ │ └── dump.go
│ │ │ │ ├── filesystem_linux.go
│ │ │ │ ├── internal/
│ │ │ │ │ ├── minimal/
│ │ │ │ │ │ └── compression.go
│ │ │ │ │ └── path/
│ │ │ │ │ └── path.go
│ │ │ │ ├── storage.go
│ │ │ │ ├── storage_linux.go
│ │ │ │ ├── storage_unsupported.go
│ │ │ │ └── toc/
│ │ │ │ └── toc.go
│ │ │ ├── config/
│ │ │ │ └── config.go
│ │ │ ├── directory/
│ │ │ │ ├── directory.go
│ │ │ │ ├── directory_unix.go
│ │ │ │ └── directory_windows.go
│ │ │ ├── fileutils/
│ │ │ │ ├── exists_freebsd.go
│ │ │ │ ├── exists_unix.go
│ │ │ │ ├── exists_windows.go
│ │ │ │ ├── fileutils.go
│ │ │ │ ├── fileutils_darwin.go
│ │ │ │ ├── fileutils_solaris.go
│ │ │ │ ├── fileutils_unix.go
│ │ │ │ ├── fileutils_windows.go
│ │ │ │ ├── reflink_linux.go
│ │ │ │ └── reflink_unsupported.go
│ │ │ ├── fsutils/
│ │ │ │ └── fsutils_linux.go
│ │ │ ├── fsverity/
│ │ │ │ ├── fsverity_linux.go
│ │ │ │ └── fsverity_unsupported.go
│ │ │ ├── homedir/
│ │ │ │ ├── homedir.go
│ │ │ │ ├── homedir_unix.go
│ │ │ │ └── homedir_windows.go
│ │ │ ├── idmap/
│ │ │ │ ├── idmapped_utils.go
│ │ │ │ └── idmapped_utils_unsupported.go
│ │ │ ├── idtools/
│ │ │ │ ├── idtools.go
│ │ │ │ ├── idtools_supported.go
│ │ │ │ ├── idtools_unix.go
│ │ │ │ ├── idtools_unsupported.go
│ │ │ │ ├── idtools_windows.go
│ │ │ │ ├── parser.go
│ │ │ │ ├── usergroupadd_linux.go
│ │ │ │ ├── usergroupadd_unsupported.go
│ │ │ │ └── utils_unix.go
│ │ │ ├── ioutils/
│ │ │ │ ├── buffer.go
│ │ │ │ ├── bytespipe.go
│ │ │ │ ├── fswriters.go
│ │ │ │ ├── fswriters_linux.go
│ │ │ │ ├── fswriters_other.go
│ │ │ │ ├── readers.go
│ │ │ │ ├── temp_unix.go
│ │ │ │ ├── temp_windows.go
│ │ │ │ ├── writeflusher.go
│ │ │ │ └── writers.go
│ │ │ ├── lockfile/
│ │ │ │ ├── lastwrite.go
│ │ │ │ ├── lockfile.go
│ │ │ │ ├── lockfile_unix.go
│ │ │ │ └── lockfile_windows.go
│ │ │ ├── longpath/
│ │ │ │ └── longpath.go
│ │ │ ├── loopback/
│ │ │ │ ├── attach_loopback.go
│ │ │ │ ├── ioctl.go
│ │ │ │ ├── loop_wrapper.go
│ │ │ │ ├── loopback.go
│ │ │ │ └── loopback_unsupported.go
│ │ │ ├── mount/
│ │ │ │ ├── flags.go
│ │ │ │ ├── flags_freebsd.go
│ │ │ │ ├── flags_linux.go
│ │ │ │ ├── flags_unsupported.go
│ │ │ │ ├── mount.go
│ │ │ │ ├── mounter_freebsd.go
│ │ │ │ ├── mounter_linux.go
│ │ │ │ ├── mounter_unsupported.go
│ │ │ │ ├── mountinfo.go
│ │ │ │ ├── mountinfo_linux.go
│ │ │ │ ├── sharedsubtree_linux.go
│ │ │ │ ├── unmount_unix.go
│ │ │ │ └── unmount_unsupported.go
│ │ │ ├── parsers/
│ │ │ │ └── parsers.go
│ │ │ ├── pools/
│ │ │ │ └── pools.go
│ │ │ ├── promise/
│ │ │ │ └── promise.go
│ │ │ ├── reexec/
│ │ │ │ ├── README.md
│ │ │ │ ├── command_freebsd.go
│ │ │ │ ├── command_linux.go
│ │ │ │ ├── command_unix.go
│ │ │ │ ├── command_unsupported.go
│ │ │ │ ├── command_windows.go
│ │ │ │ └── reexec.go
│ │ │ ├── regexp/
│ │ │ │ ├── regexp.go
│ │ │ │ ├── regexp_dontprecompile.go
│ │ │ │ └── regexp_precompile.go
│ │ │ ├── stringid/
│ │ │ │ ├── README.md
│ │ │ │ └── stringid.go
│ │ │ ├── stringutils/
│ │ │ │ ├── README.md
│ │ │ │ └── stringutils.go
│ │ │ ├── system/
│ │ │ │ ├── chmod.go
│ │ │ │ ├── chtimes.go
│ │ │ │ ├── chtimes_unix.go
│ │ │ │ ├── chtimes_windows.go
│ │ │ │ ├── errors.go
│ │ │ │ ├── exitcode.go
│ │ │ │ ├── extattr_freebsd.go
│ │ │ │ ├── extattr_unsupported.go
│ │ │ │ ├── init.go
│ │ │ │ ├── init_windows.go
│ │ │ │ ├── lchflags_bsd.go
│ │ │ │ ├── lchown.go
│ │ │ │ ├── lcow_unix.go
│ │ │ │ ├── lcow_windows.go
│ │ │ │ ├── lstat_unix.go
│ │ │ │ ├── lstat_windows.go
│ │ │ │ ├── meminfo.go
│ │ │ │ ├── meminfo_freebsd.go
│ │ │ │ ├── meminfo_linux.go
│ │ │ │ ├── meminfo_solaris.go
│ │ │ │ ├── meminfo_unsupported.go
│ │ │ │ ├── meminfo_windows.go
│ │ │ │ ├── mknod.go
│ │ │ │ ├── mknod_freebsd.go
│ │ │ │ ├── mknod_windows.go
│ │ │ │ ├── path.go
│ │ │ │ ├── path_unix.go
│ │ │ │ ├── path_windows.go
│ │ │ │ ├── process_unix.go
│ │ │ │ ├── rm.go
│ │ │ │ ├── rm_common.go
│ │ │ │ ├── rm_freebsd.go
│ │ │ │ ├── stat_common.go
│ │ │ │ ├── stat_darwin.go
│ │ │ │ ├── stat_freebsd.go
│ │ │ │ ├── stat_linux.go
│ │ │ │ ├── stat_netbsd.go
│ │ │ │ ├── stat_openbsd.go
│ │ │ │ ├── stat_solaris.go
│ │ │ │ ├── stat_unix.go
│ │ │ │ ├── stat_windows.go
│ │ │ │ ├── syscall_unix.go
│ │ │ │ ├── syscall_windows.go
│ │ │ │ ├── umask.go
│ │ │ │ ├── umask_windows.go
│ │ │ │ ├── utimes_freebsd.go
│ │ │ │ ├── utimes_linux.go
│ │ │ │ ├── utimes_unsupported.go
│ │ │ │ ├── xattrs_darwin.go
│ │ │ │ ├── xattrs_freebsd.go
│ │ │ │ ├── xattrs_linux.go
│ │ │ │ └── xattrs_unsupported.go
│ │ │ ├── tarlog/
│ │ │ │ └── tarlogger.go
│ │ │ ├── truncindex/
│ │ │ │ └── truncindex.go
│ │ │ └── unshare/
│ │ │ ├── getenv_linux_cgo.go
│ │ │ ├── getenv_linux_nocgo.go
│ │ │ ├── unshare.c
│ │ │ ├── unshare.go
│ │ │ ├── unshare_cgo.go
│ │ │ ├── unshare_darwin.go
│ │ │ ├── unshare_freebsd.c
│ │ │ ├── unshare_freebsd.go
│ │ │ ├── unshare_gccgo.go
│ │ │ ├── unshare_linux.go
│ │ │ ├── unshare_unsupported.go
│ │ │ └── unshare_unsupported_cgo.go
│ │ ├── storage.conf
│ │ ├── storage.conf-freebsd
│ │ ├── store.go
│ │ ├── types/
│ │ │ ├── default_override_test.conf
│ │ │ ├── errors.go
│ │ │ ├── idmappings.go
│ │ │ ├── options.go
│ │ │ ├── options_bsd.go
│ │ │ ├── options_darwin.go
│ │ │ ├── options_linux.go
│ │ │ ├── options_windows.go
│ │ │ ├── storage_broken.conf
│ │ │ ├── storage_test.conf
│ │ │ └── utils.go
│ │ ├── userns.go
│ │ ├── userns_unsupported.go
│ │ └── utils.go
│ ├── golang.org/
│ │ └── x/
│ │ ├── crypto/
│ │ │ ├── LICENSE
│ │ │ ├── PATENTS
│ │ │ ├── cast5/
│ │ │ │ └── cast5.go
│ │ │ ├── cryptobyte/
│ │ │ │ ├── asn1/
│ │ │ │ │ └── asn1.go
│ │ │ │ ├── asn1.go
│ │ │ │ ├── builder.go
│ │ │ │ └── string.go
│ │ │ ├── internal/
│ │ │ │ ├── alias/
│ │ │ │ │ ├── alias.go
│ │ │ │ │ └── alias_purego.go
│ │ │ │ └── poly1305/
│ │ │ │ ├── mac_noasm.go
│ │ │ │ ├── poly1305.go
│ │ │ │ ├── sum_amd64.s
│ │ │ │ ├── sum_asm.go
│ │ │ │ ├── sum_generic.go
│ │ │ │ ├── sum_loong64.s
│ │ │ │ ├── sum_ppc64x.s
│ │ │ │ ├── sum_s390x.go
│ │ │ │ └── sum_s390x.s
│ │ │ ├── nacl/
│ │ │ │ └── secretbox/
│ │ │ │ └── secretbox.go
│ │ │ ├── openpgp/
│ │ │ │ ├── armor/
│ │ │ │ │ ├── armor.go
│ │ │ │ │ └── encode.go
│ │ │ │ ├── canonical_text.go
│ │ │ │ ├── elgamal/
│ │ │ │ │ └── elgamal.go
│ │ │ │ ├── errors/
│ │ │ │ │ └── errors.go
│ │ │ │ ├── keys.go
│ │ │ │ ├── packet/
│ │ │ │ │ ├── compressed.go
│ │ │ │ │ ├── config.go
│ │ │ │ │ ├── encrypted_key.go
│ │ │ │ │ ├── literal.go
│ │ │ │ │ ├── ocfb.go
│ │ │ │ │ ├── one_pass_signature.go
│ │ │ │ │ ├── opaque.go
│ │ │ │ │ ├── packet.go
│ │ │ │ │ ├── private_key.go
│ │ │ │ │ ├── public_key.go
│ │ │ │ │ ├── public_key_v3.go
│ │ │ │ │ ├── reader.go
│ │ │ │ │ ├── signature.go
│ │ │ │ │ ├── signature_v3.go
│ │ │ │ │ ├── symmetric_key_encrypted.go
│ │ │ │ │ ├── symmetrically_encrypted.go
│ │ │ │ │ ├── userattribute.go
│ │ │ │ │ └── userid.go
│ │ │ │ ├── read.go
│ │ │ │ ├── s2k/
│ │ │ │ │ └── s2k.go
│ │ │ │ └── write.go
│ │ │ ├── pbkdf2/
│ │ │ │ └── pbkdf2.go
│ │ │ ├── salsa20/
│ │ │ │ └── salsa/
│ │ │ │ ├── hsalsa20.go
│ │ │ │ ├── salsa208.go
│ │ │ │ ├── salsa20_amd64.go
│ │ │ │ ├── salsa20_amd64.s
│ │ │ │ ├── salsa20_noasm.go
│ │ │ │ └── salsa20_ref.go
│ │ │ └── scrypt/
│ │ │ └── scrypt.go
│ │ ├── net/
│ │ │ ├── LICENSE
│ │ │ ├── PATENTS
│ │ │ ├── http/
│ │ │ │ └── httpguts/
│ │ │ │ ├── guts.go
│ │ │ │ └── httplex.go
│ │ │ ├── http2/
│ │ │ │ ├── .gitignore
│ │ │ │ ├── ascii.go
│ │ │ │ ├── ciphers.go
│ │ │ │ ├── client_conn_pool.go
│ │ │ │ ├── client_priority_go126.go
│ │ │ │ ├── client_priority_go127.go
│ │ │ │ ├── config.go
│ │ │ │ ├── config_go125.go
│ │ │ │ ├── config_go126.go
│ │ │ │ ├── databuffer.go
│ │ │ │ ├── errors.go
│ │ │ │ ├── flow.go
│ │ │ │ ├── frame.go
│ │ │ │ ├── gotrack.go
│ │ │ │ ├── hpack/
│ │ │ │ │ ├── encode.go
│ │ │ │ │ ├── hpack.go
│ │ │ │ │ ├── huffman.go
│ │ │ │ │ ├── static_table.go
│ │ │ │ │ └── tables.go
│ │ │ │ ├── http2.go
│ │ │ │ ├── pipe.go
│ │ │ │ ├── server.go
│ │ │ │ ├── transport.go
│ │ │ │ ├── unencrypted.go
│ │ │ │ ├── write.go
│ │ │ │ ├── writesched.go
│ │ │ │ ├── writesched_priority_rfc7540.go
│ │ │ │ ├── writesched_priority_rfc9218.go
│ │ │ │ ├── writesched_random.go
│ │ │ │ └── writesched_roundrobin.go
│ │ │ ├── idna/
│ │ │ │ ├── go118.go
│ │ │ │ ├── idna10.0.0.go
│ │ │ │ ├── idna9.0.0.go
│ │ │ │ ├── pre_go118.go
│ │ │ │ ├── punycode.go
│ │ │ │ ├── tables10.0.0.go
│ │ │ │ ├── tables11.0.0.go
│ │ │ │ ├── tables12.0.0.go
│ │ │ │ ├── tables13.0.0.go
│ │ │ │ ├── tables15.0.0.go
│ │ │ │ ├── tables9.0.0.go
│ │ │ │ ├── trie.go
│ │ │ │ ├── trie12.0.0.go
│ │ │ │ ├── trie13.0.0.go
│ │ │ │ └── trieval.go
│ │ │ ├── internal/
│ │ │ │ ├── httpcommon/
│ │ │ │ │ ├── ascii.go
│ │ │ │ │ ├── headermap.go
│ │ │ │ │ └── request.go
│ │ │ │ ├── httpsfv/
│ │ │ │ │ └── httpsfv.go
│ │ │ │ └── timeseries/
│ │ │ │ └── timeseries.go
│ │ │ └── trace/
│ │ │ ├── events.go
│ │ │ ├── histogram.go
│ │ │ └── trace.go
│ │ ├── oauth2/
│ │ │ ├── .travis.yml
│ │ │ ├── CONTRIBUTING.md
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── deviceauth.go
│ │ │ ├── internal/
│ │ │ │ ├── doc.go
│ │ │ │ ├── oauth2.go
│ │ │ │ ├── token.go
│ │ │ │ └── transport.go
│ │ │ ├── oauth2.go
│ │ │ ├── pkce.go
│ │ │ ├── token.go
│ │ │ └── transport.go
│ │ ├── sync/
│ │ │ ├── LICENSE
│ │ │ ├── PATENTS
│ │ │ ├── errgroup/
│ │ │ │ └── errgroup.go
│ │ │ └── semaphore/
│ │ │ └── semaphore.go
│ │ ├── sys/
│ │ │ ├── LICENSE
│ │ │ ├── PATENTS
│ │ │ ├── cpu/
│ │ │ │ ├── asm_aix_ppc64.s
│ │ │ │ ├── asm_darwin_arm64_gc.s
│ │ │ │ ├── asm_darwin_x86_gc.s
│ │ │ │ ├── byteorder.go
│ │ │ │ ├── cpu.go
│ │ │ │ ├── cpu_aix.go
│ │ │ │ ├── cpu_arm.go
│ │ │ │ ├── cpu_arm64.go
│ │ │ │ ├── cpu_arm64.s
│ │ │ │ ├── cpu_darwin_arm64.go
│ │ │ │ ├── cpu_darwin_arm64_other.go
│ │ │ │ ├── cpu_darwin_x86.go
│ │ │ │ ├── cpu_gc_arm64.go
│ │ │ │ ├── cpu_gc_s390x.go
│ │ │ │ ├── cpu_gc_x86.go
│ │ │ │ ├── cpu_gc_x86.s
│ │ │ │ ├── cpu_gccgo_arm64.go
│ │ │ │ ├── cpu_gccgo_s390x.go
│ │ │ │ ├── cpu_gccgo_x86.c
│ │ │ │ ├── cpu_gccgo_x86.go
│ │ │ │ ├── cpu_linux.go
│ │ │ │ ├── cpu_linux_arm.go
│ │ │ │ ├── cpu_linux_arm64.go
│ │ │ │ ├── cpu_linux_loong64.go
│ │ │ │ ├── cpu_linux_mips64x.go
│ │ │ │ ├── cpu_linux_noinit.go
│ │ │ │ ├── cpu_linux_ppc64x.go
│ │ │ │ ├── cpu_linux_riscv64.go
│ │ │ │ ├── cpu_linux_s390x.go
│ │ │ │ ├── cpu_loong64.go
│ │ │ │ ├── cpu_loong64.s
│ │ │ │ ├── cpu_mips64x.go
│ │ │ │ ├── cpu_mipsx.go
│ │ │ │ ├── cpu_netbsd_arm64.go
│ │ │ │ ├── cpu_openbsd_arm64.go
│ │ │ │ ├── cpu_openbsd_arm64.s
│ │ │ │ ├── cpu_other_arm.go
│ │ │ │ ├── cpu_other_arm64.go
│ │ │ │ ├── cpu_other_mips64x.go
│ │ │ │ ├── cpu_other_ppc64x.go
│ │ │ │ ├── cpu_other_riscv64.go
│ │ │ │ ├── cpu_other_x86.go
│ │ │ │ ├── cpu_ppc64x.go
│ │ │ │ ├── cpu_riscv64.go
│ │ │ │ ├── cpu_s390x.go
│ │ │ │ ├── cpu_s390x.s
│ │ │ │ ├── cpu_wasm.go
│ │ │ │ ├── cpu_windows_arm64.go
│ │ │ │ ├── cpu_x86.go
│ │ │ │ ├── cpu_zos.go
│ │ │ │ ├── cpu_zos_s390x.go
│ │ │ │ ├── endian_big.go
│ │ │ │ ├── endian_little.go
│ │ │ │ ├── hwcap_linux.go
│ │ │ │ ├── parse.go
│ │ │ │ ├── proc_cpuinfo_linux.go
│ │ │ │ ├── runtime_auxv.go
│ │ │ │ ├── runtime_auxv_go121.go
│ │ │ │ ├── syscall_aix_gccgo.go
│ │ │ │ ├── syscall_aix_ppc64_gc.go
│ │ │ │ ├── syscall_darwin_arm64_gc.go
│ │ │ │ └── syscall_darwin_x86_gc.go
│ │ │ ├── plan9/
│ │ │ │ ├── asm.s
│ │ │ │ ├── asm_plan9_386.s
│ │ │ │ ├── asm_plan9_amd64.s
│ │ │ │ ├── asm_plan9_arm.s
│ │ │ │ ├── const_plan9.go
│ │ │ │ ├── dir_plan9.go
│ │ │ │ ├── env_plan9.go
│ │ │ │ ├── errors_plan9.go
│ │ │ │ ├── mkall.sh
│ │ │ │ ├── mkerrors.sh
│ │ │ │ ├── mksysnum_plan9.sh
│ │ │ │ ├── pwd_plan9.go
│ │ │ │ ├── race.go
│ │ │ │ ├── race0.go
│ │ │ │ ├── str.go
│ │ │ │ ├── syscall.go
│ │ │ │ ├── syscall_plan9.go
│ │ │ │ ├── zsyscall_plan9_386.go
│ │ │ │ ├── zsyscall_plan9_amd64.go
│ │ │ │ ├── zsyscall_plan9_arm.go
│ │ │ │ └── zsysnum_plan9.go
│ │ │ ├── unix/
│ │ │ │ ├── .gitignore
│ │ │ │ ├── README.md
│ │ │ │ ├── affinity_linux.go
│ │ │ │ ├── aliases.go
│ │ │ │ ├── asm_aix_ppc64.s
│ │ │ │ ├── asm_bsd_386.s
│ │ │ │ ├── asm_bsd_amd64.s
│ │ │ │ ├── asm_bsd_arm.s
│ │ │ │ ├── asm_bsd_arm64.s
│ │ │ │ ├── asm_bsd_ppc64.s
│ │ │ │ ├── asm_bsd_riscv64.s
│ │ │ │ ├── asm_linux_386.s
│ │ │ │ ├── asm_linux_amd64.s
│ │ │ │ ├── asm_linux_arm.s
│ │ │ │ ├── asm_linux_arm64.s
│ │ │ │ ├── asm_linux_loong64.s
│ │ │ │ ├── asm_linux_mips64x.s
│ │ │ │ ├── asm_linux_mipsx.s
│ │ │ │ ├── asm_linux_ppc64x.s
│ │ │ │ ├── asm_linux_riscv64.s
│ │ │ │ ├── asm_linux_s390x.s
│ │ │ │ ├── asm_openbsd_mips64.s
│ │ │ │ ├── asm_solaris_amd64.s
│ │ │ │ ├── asm_zos_s390x.s
│ │ │ │ ├── auxv.go
│ │ │ │ ├── auxv_unsupported.go
│ │ │ │ ├── bluetooth_linux.go
│ │ │ │ ├── bpxsvc_zos.go
│ │ │ │ ├── bpxsvc_zos.s
│ │ │ │ ├── cap_freebsd.go
│ │ │ │ ├── constants.go
│ │ │ │ ├── dev_aix_ppc.go
│ │ │ │ ├── dev_aix_ppc64.go
│ │ │ │ ├── dev_darwin.go
│ │ │ │ ├── dev_dragonfly.go
│ │ │ │ ├── dev_freebsd.go
│ │ │ │ ├── dev_linux.go
│ │ │ │ ├── dev_netbsd.go
│ │ │ │ ├── dev_openbsd.go
│ │ │ │ ├── dev_zos.go
│ │ │ │ ├── dirent.go
│ │ │ │ ├── endian_big.go
│ │ │ │ ├── endian_little.go
│ │ │ │ ├── env_unix.go
│ │ │ │ ├── fcntl.go
│ │ │ │ ├── fcntl_darwin.go
│ │ │ │ ├── fcntl_linux_32bit.go
│ │ │ │ ├── fdset.go
│ │ │ │ ├── gccgo.go
│ │ │ │ ├── gccgo_c.c
│ │ │ │ ├── gccgo_linux_amd64.go
│ │ │ │ ├── ifreq_linux.go
│ │ │ │ ├── ioctl_linux.go
│ │ │ │ ├── ioctl_signed.go
│ │ │ │ ├── ioctl_unsigned.go
│ │ │ │ ├── ioctl_zos.go
│ │ │ │ ├── mkall.sh
│ │ │ │ ├── mkerrors.sh
│ │ │ │ ├── mmap_nomremap.go
│ │ │ │ ├── mremap.go
│ │ │ │ ├── pagesize_unix.go
│ │ │ │ ├── pledge_openbsd.go
│ │ │ │ ├── ptrace_darwin.go
│ │ │ │ ├── ptrace_ios.go
│ │ │ │ ├── race.go
│ │ │ │ ├── race0.go
│ │ │ │ ├── readdirent_getdents.go
│ │ │ │ ├── readdirent_getdirentries.go
│ │ │ │ ├── sockcmsg_dragonfly.go
│ │ │ │ ├── sockcmsg_linux.go
│ │ │ │ ├── sockcmsg_unix.go
│ │ │ │ ├── sockcmsg_unix_other.go
│ │ │ │ ├── sockcmsg_zos.go
│ │ │ │ ├── symaddr_zos_s390x.s
│ │ │ │ ├── syscall.go
│ │ │ │ ├── syscall_aix.go
│ │ │ │ ├── syscall_aix_ppc.go
│ │ │ │ ├── syscall_aix_ppc64.go
│ │ │ │ ├── syscall_bsd.go
│ │ │ │ ├── syscall_darwin.go
│ │ │ │ ├── syscall_darwin_amd64.go
│ │ │ │ ├── syscall_darwin_arm64.go
│ │ │ │ ├── syscall_darwin_libSystem.go
│ │ │ │ ├── syscall_dragonfly.go
│ │ │ │ ├── syscall_dragonfly_amd64.go
│ │ │ │ ├── syscall_freebsd.go
│ │ │ │ ├── syscall_freebsd_386.go
│ │ │ │ ├── syscall_freebsd_amd64.go
│ │ │ │ ├── syscall_freebsd_arm.go
│ │ │ │ ├── syscall_freebsd_arm64.go
│ │ │ │ ├── syscall_freebsd_riscv64.go
│ │ │ │ ├── syscall_hurd.go
│ │ │ │ ├── syscall_hurd_386.go
│ │ │ │ ├── syscall_illumos.go
│ │ │ │ ├── syscall_linux.go
│ │ │ │ ├── syscall_linux_386.go
│ │ │ │ ├── syscall_linux_alarm.go
│ │ │ │ ├── syscall_linux_amd64.go
│ │ │ │ ├── syscall_linux_amd64_gc.go
│ │ │ │ ├── syscall_linux_arm.go
│ │ │ │ ├── syscall_linux_arm64.go
│ │ │ │ ├── syscall_linux_gc.go
│ │ │ │ ├── syscall_linux_gc_386.go
│ │ │ │ ├── syscall_linux_gc_arm.go
│ │ │ │ ├── syscall_linux_gccgo_386.go
│ │ │ │ ├── syscall_linux_gccgo_arm.go
│ │ │ │ ├── syscall_linux_loong64.go
│ │ │ │ ├── syscall_linux_mips64x.go
│ │ │ │ ├── syscall_linux_mipsx.go
│ │ │ │ ├── syscall_linux_ppc.go
│ │ │ │ ├── syscall_linux_ppc64x.go
│ │ │ │ ├── syscall_linux_riscv64.go
│ │ │ │ ├── syscall_linux_s390x.go
│ │ │ │ ├── syscall_linux_sparc64.go
│ │ │ │ ├── syscall_netbsd.go
│ │ │ │ ├── syscall_netbsd_386.go
│ │ │ │ ├── syscall_netbsd_amd64.go
│ │ │ │ ├── syscall_netbsd_arm.go
│ │ │ │ ├── syscall_netbsd_arm64.go
│ │ │ │ ├── syscall_openbsd.go
│ │ │ │ ├── syscall_openbsd_386.go
│ │ │ │ ├── syscall_openbsd_amd64.go
│ │ │ │ ├── syscall_openbsd_arm.go
│ │ │ │ ├── syscall_openbsd_arm64.go
│ │ │ │ ├── syscall_openbsd_libc.go
│ │ │ │ ├── syscall_openbsd_mips64.go
│ │ │ │ ├── syscall_openbsd_ppc64.go
│ │ │ │ ├── syscall_openbsd_riscv64.go
│ │ │ │ ├── syscall_solaris.go
│ │ │ │ ├── syscall_solaris_amd64.go
│ │ │ │ ├── syscall_unix.go
│ │ │ │ ├── syscall_unix_gc.go
│ │ │ │ ├── syscall_unix_gc_ppc64x.go
│ │ │ │ ├── syscall_zos_s390x.go
│ │ │ │ ├── sysvshm_linux.go
│ │ │ │ ├── sysvshm_unix.go
│ │ │ │ ├── sysvshm_unix_other.go
│ │ │ │ ├── timestruct.go
│ │ │ │ ├── unveil_openbsd.go
│ │ │ │ ├── vgetrandom_linux.go
│ │ │ │ ├── vgetrandom_unsupported.go
│ │ │ │ ├── xattr_bsd.go
│ │ │ │ ├── zerrors_aix_ppc.go
│ │ │ │ ├── zerrors_aix_ppc64.go
│ │ │ │ ├── zerrors_darwin_amd64.go
│ │ │ │ ├── zerrors_darwin_arm64.go
│ │ │ │ ├── zerrors_dragonfly_amd64.go
│ │ │ │ ├── zerrors_freebsd_386.go
│ │ │ │ ├── zerrors_freebsd_amd64.go
│ │ │ │ ├── zerrors_freebsd_arm.go
│ │ │ │ ├── zerrors_freebsd_arm64.go
│ │ │ │ ├── zerrors_freebsd_riscv64.go
│ │ │ │ ├── zerrors_linux.go
│ │ │ │ ├── zerrors_linux_386.go
│ │ │ │ ├── zerrors_linux_amd64.go
│ │ │ │ ├── zerrors_linux_arm.go
│ │ │ │ ├── zerrors_linux_arm64.go
│ │ │ │ ├── zerrors_linux_loong64.go
│ │ │ │ ├── zerrors_linux_mips.go
│ │ │ │ ├── zerrors_linux_mips64.go
│ │ │ │ ├── zerrors_linux_mips64le.go
│ │ │ │ ├── zerrors_linux_mipsle.go
│ │ │ │ ├── zerrors_linux_ppc.go
│ │ │ │ ├── zerrors_linux_ppc64.go
│ │ │ │ ├── zerrors_linux_ppc64le.go
│ │ │ │ ├── zerrors_linux_riscv64.go
│ │ │ │ ├── zerrors_linux_s390x.go
│ │ │ │ ├── zerrors_linux_sparc64.go
│ │ │ │ ├── zerrors_netbsd_386.go
│ │ │ │ ├── zerrors_netbsd_amd64.go
│ │ │ │ ├── zerrors_netbsd_arm.go
│ │ │ │ ├── zerrors_netbsd_arm64.go
│ │ │ │ ├── zerrors_openbsd_386.go
│ │ │ │ ├── zerrors_openbsd_amd64.go
│ │ │ │ ├── zerrors_openbsd_arm.go
│ │ │ │ ├── zerrors_openbsd_arm64.go
│ │ │ │ ├── zerrors_openbsd_mips64.go
│ │ │ │ ├── zerrors_openbsd_ppc64.go
│ │ │ │ ├── zerrors_openbsd_riscv64.go
│ │ │ │ ├── zerrors_solaris_amd64.go
│ │ │ │ ├── zerrors_zos_s390x.go
│ │ │ │ ├── zptrace_armnn_linux.go
│ │ │ │ ├── zptrace_linux_arm64.go
│ │ │ │ ├── zptrace_mipsnn_linux.go
│ │ │ │ ├── zptrace_mipsnnle_linux.go
│ │ │ │ ├── zptrace_x86_linux.go
│ │ │ │ ├── zsymaddr_zos_s390x.s
│ │ │ │ ├── zsyscall_aix_ppc.go
│ │ │ │ ├── zsyscall_aix_ppc64.go
│ │ │ │ ├── zsyscall_aix_ppc64_gc.go
│ │ │ │ ├── zsyscall_aix_ppc64_gccgo.go
│ │ │ │ ├── zsyscall_darwin_amd64.go
│ │ │ │ ├── zsyscall_darwin_amd64.s
│ │ │ │ ├── zsyscall_darwin_arm64.go
│ │ │ │ ├── zsyscall_darwin_arm64.s
│ │ │ │ ├── zsyscall_dragonfly_amd64.go
│ │ │ │ ├── zsyscall_freebsd_386.go
│ │ │ │ ├── zsyscall_freebsd_amd64.go
│ │ │ │ ├── zsyscall_freebsd_arm.go
│ │ │ │ ├── zsyscall_freebsd_arm64.go
│ │ │ │ ├── zsyscall_freebsd_riscv64.go
│ │ │ │ ├── zsyscall_illumos_amd64.go
│ │ │ │ ├── zsyscall_linux.go
│ │ │ │ ├── zsyscall_linux_386.go
│ │ │ │ ├── zsyscall_linux_amd64.go
│ │ │ │ ├── zsyscall_linux_arm.go
│ │ │ │ ├── zsyscall_linux_arm64.go
│ │ │ │ ├── zsyscall_linux_loong64.go
│ │ │ │ ├── zsyscall_linux_mips.go
│ │ │ │ ├── zsyscall_linux_mips64.go
│ │ │ │ ├── zsyscall_linux_mips64le.go
│ │ │ │ ├── zsyscall_linux_mipsle.go
│ │ │ │ ├── zsyscall_linux_ppc.go
│ │ │ │ ├── zsyscall_linux_ppc64.go
│ │ │ │ ├── zsyscall_linux_ppc64le.go
│ │ │ │ ├── zsyscall_linux_riscv64.go
│ │ │ │ ├── zsyscall_linux_s390x.go
│ │ │ │ ├── zsyscall_linux_sparc64.go
│ │ │ │ ├── zsyscall_netbsd_386.go
│ │ │ │ ├── zsyscall_netbsd_amd64.go
│ │ │ │ ├── zsyscall_netbsd_arm.go
│ │ │ │ ├── zsyscall_netbsd_arm64.go
│ │ │ │ ├── zsyscall_openbsd_386.go
│ │ │ │ ├── zsyscall_openbsd_386.s
│ │ │ │ ├── zsyscall_openbsd_amd64.go
│ │ │ │ ├── zsyscall_openbsd_amd64.s
│ │ │ │ ├── zsyscall_openbsd_arm.go
│ │ │ │ ├── zsyscall_openbsd_arm.s
│ │ │ │ ├── zsyscall_openbsd_arm64.go
│ │ │ │ ├── zsyscall_openbsd_arm64.s
│ │ │ │ ├── zsyscall_openbsd_mips64.go
│ │ │ │ ├── zsyscall_openbsd_mips64.s
│ │ │ │ ├── zsyscall_openbsd_ppc64.go
│ │ │ │ ├── zsyscall_openbsd_ppc64.s
│ │ │ │ ├── zsyscall_openbsd_riscv64.go
│ │ │ │ ├── zsyscall_openbsd_riscv64.s
│ │ │ │ ├── zsyscall_solaris_amd64.go
│ │ │ │ ├── zsyscall_zos_s390x.go
│ │ │ │ ├── zsysctl_openbsd_386.go
│ │ │ │ ├── zsysctl_openbsd_amd64.go
│ │ │ │ ├── zsysctl_openbsd_arm.go
│ │ │ │ ├── zsysctl_openbsd_arm64.go
│ │ │ │ ├── zsysctl_openbsd_mips64.go
│ │ │ │ ├── zsysctl_openbsd_ppc64.go
│ │ │ │ ├── zsysctl_openbsd_riscv64.go
│ │ │ │ ├── zsysnum_darwin_amd64.go
│ │ │ │ ├── zsysnum_darwin_arm64.go
│ │ │ │ ├── zsysnum_dragonfly_amd64.go
│ │ │ │ ├── zsysnum_freebsd_386.go
│ │ │ │ ├── zsysnum_freebsd_amd64.go
│ │ │ │ ├── zsysnum_freebsd_arm.go
│ │ │ │ ├── zsysnum_freebsd_arm64.go
│ │ │ │ ├── zsysnum_freebsd_riscv64.go
│ │ │ │ ├── zsysnum_linux_386.go
│ │ │ │ ├── zsysnum_linux_amd64.go
│ │ │ │ ├── zsysnum_linux_arm.go
│ │ │ │ ├── zsysnum_linux_arm64.go
│ │ │ │ ├── zsysnum_linux_loong64.go
│ │ │ │ ├── zsysnum_linux_mips.go
│ │ │ │ ├── zsysnum_linux_mips64.go
│ │ │ │ ├── zsysnum_linux_mips64le.go
│ │ │ │ ├── zsysnum_linux_mipsle.go
│ │ │ │ ├── zsysnum_linux_ppc.go
│ │ │ │ ├── zsysnum_linux_ppc64.go
│ │ │ │ ├── zsysnum_linux_ppc64le.go
│ │ │ │ ├── zsysnum_linux_riscv64.go
│ │ │ │ ├── zsysnum_linux_s390x.go
│ │ │ │ ├── zsysnum_linux_sparc64.go
│ │ │ │ ├── zsysnum_netbsd_386.go
│ │ │ │ ├── zsysnum_netbsd_amd64.go
│ │ │ │ ├── zsysnum_netbsd_arm.go
│ │ │ │ ├── zsysnum_netbsd_arm64.go
│ │ │ │ ├── zsysnum_openbsd_386.go
│ │ │ │ ├── zsysnum_openbsd_amd64.go
│ │ │ │ ├── zsysnum_openbsd_arm.go
│ │ │ │ ├── zsysnum_openbsd_arm64.go
│ │ │ │ ├── zsysnum_openbsd_mips64.go
│ │ │ │ ├── zsysnum_openbsd_ppc64.go
│ │ │ │ ├── zsysnum_openbsd_riscv64.go
│ │ │ │ ├── zsysnum_zos_s390x.go
│ │ │ │ ├── ztypes_aix_ppc.go
│ │ │ │ ├── ztypes_aix_ppc64.go
│ │ │ │ ├── ztypes_darwin_amd64.go
│ │ │ │ ├── ztypes_darwin_arm64.go
│ │ │ │ ├── ztypes_dragonfly_amd64.go
│ │ │ │ ├── ztypes_freebsd_386.go
│ │ │ │ ├── ztypes_freebsd_amd64.go
│ │ │ │ ├── ztypes_freebsd_arm.go
│ │ │ │ ├── ztypes_freebsd_arm64.go
│ │ │ │ ├── ztypes_freebsd_riscv64.go
│ │ │ │ ├── ztypes_linux.go
│ │ │ │ ├── ztypes_linux_386.go
│ │ │ │ ├── ztypes_linux_amd64.go
│ │ │ │ ├── ztypes_linux_arm.go
│ │ │ │ ├── ztypes_linux_arm64.go
│ │ │ │ ├── ztypes_linux_loong64.go
│ │ │ │ ├── ztypes_linux_mips.go
│ │ │ │ ├── ztypes_linux_mips64.go
│ │ │ │ ├── ztypes_linux_mips64le.go
│ │ │ │ ├── ztypes_linux_mipsle.go
│ │ │ │ ├── ztypes_linux_ppc.go
│ │ │ │ ├── ztypes_linux_ppc64.go
│ │ │ │ ├── ztypes_linux_ppc64le.go
│ │ │ │ ├── ztypes_linux_riscv64.go
│ │ │ │ ├── ztypes_linux_s390x.go
│ │ │ │ ├── ztypes_linux_sparc64.go
│ │ │ │ ├── ztypes_netbsd_386.go
│ │ │ │ ├── ztypes_netbsd_amd64.go
│ │ │ │ ├── ztypes_netbsd_arm.go
│ │ │ │ ├── ztypes_netbsd_arm64.go
│ │ │ │ ├── ztypes_openbsd_386.go
│ │ │ │ ├── ztypes_openbsd_amd64.go
│ │ │ │ ├── ztypes_openbsd_arm.go
│ │ │ │ ├── ztypes_openbsd_arm64.go
│ │ │ │ ├── ztypes_openbsd_mips64.go
│ │ │ │ ├── ztypes_openbsd_ppc64.go
│ │ │ │ ├── ztypes_openbsd_riscv64.go
│ │ │ │ ├── ztypes_solaris_amd64.go
│ │ │ │ └── ztypes_zos_s390x.go
│ │ │ └── windows/
│ │ │ ├── aliases.go
│ │ │ ├── dll_windows.go
│ │ │ ├── env_windows.go
│ │ │ ├── eventlog.go
│ │ │ ├── exec_windows.go
│ │ │ ├── memory_windows.go
│ │ │ ├── mkerrors.bash
│ │ │ ├── mkknownfolderids.bash
│ │ │ ├── mksyscall.go
│ │ │ ├── race.go
│ │ │ ├── race0.go
│ │ │ ├── security_windows.go
│ │ │ ├── service.go
│ │ │ ├── setupapi_windows.go
│ │ │ ├── str.go
│ │ │ ├── syscall.go
│ │ │ ├── syscall_windows.go
│ │ │ ├── types_windows.go
│ │ │ ├── types_windows_386.go
│ │ │ ├── types_windows_amd64.go
│ │ │ ├── types_windows_arm.go
│ │ │ ├── types_windows_arm64.go
│ │ │ ├── zerrors_windows.go
│ │ │ ├── zknownfolderids_windows.go
│ │ │ └── zsyscall_windows.go
│ │ ├── term/
│ │ │ ├── CONTRIBUTING.md
│ │ │ ├── LICENSE
│ │ │ ├── PATENTS
│ │ │ ├── README.md
│ │ │ ├── codereview.cfg
│ │ │ ├── term.go
│ │ │ ├── term_plan9.go
│ │ │ ├── term_unix.go
│ │ │ ├── term_unix_bsd.go
│ │ │ ├── term_unix_other.go
│ │ │ ├── term_unsupported.go
│ │ │ ├── term_windows.go
│ │ │ └── terminal.go
│ │ └── text/
│ │ ├── LICENSE
│ │ ├── PATENTS
│ │ ├── feature/
│ │ │ └── plural/
│ │ │ ├── common.go
│ │ │ ├── message.go
│ │ │ ├── plural.go
│ │ │ └── tables.go
│ │ ├── internal/
│ │ │ ├── catmsg/
│ │ │ │ ├── catmsg.go
│ │ │ │ ├── codec.go
│ │ │ │ └── varint.go
│ │ │ ├── format/
│ │ │ │ ├── format.go
│ │ │ │ └── parser.go
│ │ │ ├── internal.go
│ │ │ ├── language/
│ │ │ │ ├── common.go
│ │ │ │ ├── compact/
│ │ │ │ │ ├── compact.go
│ │ │ │ │ ├── language.go
│ │ │ │ │ ├── parents.go
│ │ │ │ │ ├── tables.go
│ │ │ │ │ └── tags.go
│ │ │ │ ├── compact.go
│ │ │ │ ├── compose.go
│ │ │ │ ├── coverage.go
│ │ │ │ ├── language.go
│ │ │ │ ├── lookup.go
│ │ │ │ ├── match.go
│ │ │ │ ├── parse.go
│ │ │ │ ├── tables.go
│ │ │ │ └── tags.go
│ │ │ ├── match.go
│ │ │ ├── number/
│ │ │ │ ├── common.go
│ │ │ │ ├── decimal.go
│ │ │ │ ├── format.go
│ │ │ │ ├── number.go
│ │ │ │ ├── pattern.go
│ │ │ │ ├── roundingmode_string.go
│ │ │ │ └── tables.go
│ │ │ ├── stringset/
│ │ │ │ └── set.go
│ │ │ └── tag/
│ │ │ └── tag.go
│ │ ├── language/
│ │ │ ├── coverage.go
│ │ │ ├── doc.go
│ │ │ ├── language.go
│ │ │ ├── match.go
│ │ │ ├── parse.go
│ │ │ ├── tables.go
│ │ │ └── tags.go
│ │ ├── message/
│ │ │ ├── catalog/
│ │ │ │ ├── catalog.go
│ │ │ │ └── dict.go
│ │ │ ├── catalog.go
│ │ │ ├── doc.go
│ │ │ ├── format.go
│ │ │ ├── message.go
│ │ │ └── print.go
│ │ ├── secure/
│ │ │ └── bidirule/
│ │ │ └── bidirule.go
│ │ ├── transform/
│ │ │ └── transform.go
│ │ └── unicode/
│ │ ├── bidi/
│ │ │ ├── bidi.go
│ │ │ ├── bracket.go
│ │ │ ├── core.go
│ │ │ ├── prop.go
│ │ │ ├── tables15.0.0.go
│ │ │ ├── tables17.0.0.go
│ │ │ └── trieval.go
│ │ └── norm/
│ │ ├── composition.go
│ │ ├── forminfo.go
│ │ ├── input.go
│ │ ├── iter.go
│ │ ├── normalize.go
│ │ ├── readwriter.go
│ │ ├── tables15.0.0.go
│ │ ├── tables17.0.0.go
│ │ ├── transform.go
│ │ └── trie.go
│ ├── google.golang.org/
│ │ ├── genproto/
│ │ │ └── googleapis/
│ │ │ ├── api/
│ │ │ │ ├── LICENSE
│ │ │ │ ├── annotations/
│ │ │ │ │ ├── annotations.pb.go
│ │ │ │ │ ├── client.pb.go
│ │ │ │ │ ├── field_behavior.pb.go
│ │ │ │ │ ├── field_info.pb.go
│ │ │ │ │ ├── http.pb.go
│ │ │ │ │ ├── resource.pb.go
│ │ │ │ │ └── routing.pb.go
│ │ │ │ └── launch_stage.pb.go
│ │ │ └── rpc/
│ │ │ ├── LICENSE
│ │ │ └── status/
│ │ │ └── status.pb.go
│ │ ├── grpc/
│ │ │ ├── AUTHORS
│ │ │ ├── CODE-OF-CONDUCT.md
│ │ │ ├── CONTRIBUTING.md
│ │ │ ├── GOVERNANCE.md
│ │ │ ├── LICENSE
│ │ │ ├── MAINTAINERS.md
│ │ │ ├── Makefile
│ │ │ ├── NOTICE.txt
│ │ │ ├── README.md
│ │ │ ├── SECURITY.md
│ │ │ ├── attributes/
│ │ │ │ └── attributes.go
│ │ │ ├── backoff/
│ │ │ │ └── backoff.go
│ │ │ ├── backoff.go
│ │ │ ├── balancer/
│ │ │ │ ├── balancer.go
│ │ │ │ ├── base/
│ │ │ │ │ ├── balancer.go
│ │ │ │ │ └── base.go
│ │ │ │ ├── conn_state_evaluator.go
│ │ │ │ ├── endpointsharding/
│ │ │ │ │ └── endpointsharding.go
│ │ │ │ ├── grpclb/
│ │ │ │ │ └── state/
│ │ │ │ │ └── state.go
│ │ │ │ ├── pickfirst/
│ │ │ │ │ ├── internal/
│ │ │ │ │ │ └── internal.go
│ │ │ │ │ └── pickfirst.go
│ │ │ │ ├── roundrobin/
│ │ │ │ │ └── roundrobin.go
│ │ │ │ └── subconn.go
│ │ │ ├── balancer_wrapper.go
│ │ │ ├── binarylog/
│ │ │ │ └── grpc_binarylog_v1/
│ │ │ │ └── binarylog.pb.go
│ │ │ ├── call.go
│ │ │ ├── channelz/
│ │ │ │ └── channelz.go
│ │ │ ├── clientconn.go
│ │ │ ├── codec.go
│ │ │ ├── codes/
│ │ │ │ ├── code_string.go
│ │ │ │ └── codes.go
│ │ │ ├── connectivity/
│ │ │ │ └── connectivity.go
│ │ │ ├── credentials/
│ │ │ │ ├── credentials.go
│ │ │ │ ├── insecure/
│ │ │ │ │ └── insecure.go
│ │ │ │ └── tls.go
│ │ │ ├── dialoptions.go
│ │ │ ├── doc.go
│ │ │ ├── encoding/
│ │ │ │ ├── encoding.go
│ │ │ │ ├── encoding_v2.go
│ │ │ │ ├── internal/
│ │ │ │ │ └── internal.go
│ │ │ │ └── proto/
│ │ │ │ └── proto.go
│ │ │ ├── experimental/
│ │ │ │ └── stats/
│ │ │ │ ├── metricregistry.go
│ │ │ │ └── metrics.go
│ │ │ ├── grpclog/
│ │ │ │ ├── component.go
│ │ │ │ ├── grpclog.go
│ │ │ │ ├── internal/
│ │ │ │ │ ├── grpclog.go
│ │ │ │ │ ├── logger.go
│ │ │ │ │ └── loggerv2.go
│ │ │ │ ├── logger.go
│ │ │ │ └── loggerv2.go
│ │ │ ├── interceptor.go
│ │ │ ├── internal/
│ │ │ │ ├── backoff/
│ │ │ │ │ └── backoff.go
│ │ │ │ ├── balancer/
│ │ │ │ │ └── gracefulswitch/
│ │ │ │ │ ├── config.go
│ │ │ │ │ └── gracefulswitch.go
│ │ │ │ ├── balancerload/
│ │ │ │ │ └── load.go
│ │ │ │ ├── binarylog/
│ │ │ │ │ ├── binarylog.go
│ │ │ │ │ ├── binarylog_testutil.go
│ │ │ │ │ ├── env_config.go
│ │ │ │ │ ├── method_logger.go
│ │ │ │ │ └── sink.go
│ │ │ │ ├── buffer/
│ │ │ │ │ └── unbounded.go
│ │ │ │ ├── channelz/
│ │ │ │ │ ├── channel.go
│ │ │ │ │ ├── channelmap.go
│ │ │ │ │ ├── funcs.go
│ │ │ │ │ ├── logging.go
│ │ │ │ │ ├── server.go
│ │ │ │ │ ├── socket.go
│ │ │ │ │ ├── subchannel.go
│ │ │ │ │ ├── syscall_linux.go
│ │ │ │ │ ├── syscall_nonlinux.go
│ │ │ │ │ └── trace.go
│ │ │ │ ├── credentials/
│ │ │ │ │ ├── credentials.go
│ │ │ │ │ ├── spiffe.go
│ │ │ │ │ ├── syscallconn.go
│ │ │ │ │ └── util.go
│ │ │ │ ├── envconfig/
│ │ │ │ │ ├── envconfig.go
│ │ │ │ │ ├── observability.go
│ │ │ │ │ └── xds.go
│ │ │ │ ├── experimental.go
│ │ │ │ ├── grpclog/
│ │ │ │ │ └── prefix_logger.go
│ │ │ │ ├── grpcsync/
│ │ │ │ │ ├── callback_serializer.go
│ │ │ │ │ ├── event.go
│ │ │ │ │ └── pubsub.go
│ │ │ │ ├── grpcutil/
│ │ │ │ │ ├── compressor.go
│ │ │ │ │ ├── encode_duration.go
│ │ │ │ │ ├── grpcutil.go
│ │ │ │ │ ├── metadata.go
│ │ │ │ │ ├── method.go
│ │ │ │ │ └── regex.go
│ │ │ │ ├── idle/
│ │ │ │ │ └── idle.go
│ │ │ │ ├── internal.go
│ │ │ │ ├── metadata/
│ │ │ │ │ └── metadata.go
│ │ │ │ ├── pretty/
│ │ │ │ │ └── pretty.go
│ │ │ │ ├── proxyattributes/
│ │ │ │ │ └── proxyattributes.go
│ │ │ │ ├── resolver/
│ │ │ │ │ ├── config_selector.go
│ │ │ │ │ ├── delegatingresolver/
│ │ │ │ │ │ └── delegatingresolver.go
│ │ │ │ │ ├── dns/
│ │ │ │ │ │ ├── dns_resolver.go
│ │ │ │ │ │ └── internal/
│ │ │ │ │ │ └── internal.go
│ │ │ │ │ ├── passthrough/
│ │ │ │ │ │ └── passthrough.go
│ │ │ │ │ └── unix/
│ │ │ │ │ └── unix.go
│ │ │ │ ├── serviceconfig/
│ │ │ │ │ ├── duration.go
│ │ │ │ │ └── serviceconfig.go
│ │ │ │ ├── stats/
│ │ │ │ │ ├── labels.go
│ │ │ │ │ ├── metrics_recorder_list.go
│ │ │ │ │ └── stats.go
│ │ │ │ ├── status/
│ │ │ │ │ └── status.go
│ │ │ │ ├── syscall/
│ │ │ │ │ ├── syscall_linux.go
│ │ │ │ │ └── syscall_nonlinux.go
│ │ │ │ ├── tcp_keepalive_others.go
│ │ │ │ ├── tcp_keepalive_unix.go
│ │ │ │ ├── tcp_keepalive_windows.go
│ │ │ │ └── transport/
│ │ │ │ ├── bdp_estimator.go
│ │ │ │ ├── client_stream.go
│ │ │ │ ├── controlbuf.go
│ │ │ │ ├── defaults.go
│ │ │ │ ├── flowcontrol.go
│ │ │ │ ├── handler_server.go
│ │ │ │ ├── http2_client.go
│ │ │ │ ├── http2_server.go
│ │ │ │ ├── http_util.go
│ │ │ │ ├── logging.go
│ │ │ │ ├── networktype/
│ │ │ │ │ └── networktype.go
│ │ │ │ ├── proxy.go
│ │ │ │ ├── server_stream.go
│ │ │ │ └── transport.go
│ │ │ ├── keepalive/
│ │ │ │ └── keepalive.go
│ │ │ ├── mem/
│ │ │ │ ├── buffer_pool.go
│ │ │ │ ├── buffer_slice.go
│ │ │ │ └── buffers.go
│ │ │ ├── metadata/
│ │ │ │ └── metadata.go
│ │ │ ├── peer/
│ │ │ │ └── peer.go
│ │ │ ├── picker_wrapper.go
│ │ │ ├── preloader.go
│ │ │ ├── resolver/
│ │ │ │ ├── dns/
│ │ │ │ │ └── dns_resolver.go
│ │ │ │ ├── map.go
│ │ │ │ └── resolver.go
│ │ │ ├── resolver_wrapper.go
│ │ │ ├── rpc_util.go
│ │ │ ├── server.go
│ │ │ ├── service_config.go
│ │ │ ├── serviceconfig/
│ │ │ │ └── serviceconfig.go
│ │ │ ├── stats/
│ │ │ │ ├── handlers.go
│ │ │ │ ├── metrics.go
│ │ │ │ └── stats.go
│ │ │ ├── status/
│ │ │ │ └── status.go
│ │ │ ├── stream.go
│ │ │ ├── stream_interfaces.go
│ │ │ ├── tap/
│ │ │ │ └── tap.go
│ │ │ ├── trace.go
│ │ │ ├── trace_notrace.go
│ │ │ ├── trace_withtrace.go
│ │ │ └── version.go
│ │ └── protobuf/
│ │ ├── LICENSE
│ │ ├── PATENTS
│ │ ├── encoding/
│ │ │ ├── protojson/
│ │ │ │ ├── decode.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── encode.go
│ │ │ │ └── well_known_types.go
│ │ │ ├── prototext/
│ │ │ │ ├── decode.go
│ │ │ │ ├── doc.go
│ │ │ │ └── encode.go
│ │ │ └── protowire/
│ │ │ └── wire.go
│ │ ├── internal/
│ │ │ ├── descfmt/
│ │ │ │ └── stringer.go
│ │ │ ├── descopts/
│ │ │ │ └── options.go
│ │ │ ├── detrand/
│ │ │ │ └── rand.go
│ │ │ ├── editiondefaults/
│ │ │ │ ├── defaults.go
│ │ │ │ └── editions_defaults.binpb
│ │ │ ├── editionssupport/
│ │ │ │ └── editions.go
│ │ │ ├── encoding/
│ │ │ │ ├── defval/
│ │ │ │ │ └── default.go
│ │ │ │ ├── json/
│ │ │ │ │ ├── decode.go
│ │ │ │ │ ├── decode_number.go
│ │ │ │ │ ├── decode_string.go
│ │ │ │ │ ├── decode_token.go
│ │ │ │ │ └── encode.go
│ │ │ │ ├── messageset/
│ │ │ │ │ └── messageset.go
│ │ │ │ ├── tag/
│ │ │ │ │ └── tag.go
│ │ │ │ └── text/
│ │ │ │ ├── decode.go
│ │ │ │ ├── decode_number.go
│ │ │ │ ├── decode_string.go
│ │ │ │ ├── decode_token.go
│ │ │ │ ├── doc.go
│ │ │ │ └── encode.go
│ │ │ ├── errors/
│ │ │ │ └── errors.go
│ │ │ ├── filedesc/
│ │ │ │ ├── build.go
│ │ │ │ ├── desc.go
│ │ │ │ ├── desc_init.go
│ │ │ │ ├── desc_lazy.go
│ │ │ │ ├── desc_list.go
│ │ │ │ ├── desc_list_gen.go
│ │ │ │ ├── editions.go
│ │ │ │ ├── placeholder.go
│ │ │ │ └── presence.go
│ │ │ ├── filetype/
│ │ │ │ └── build.go
│ │ │ ├── flags/
│ │ │ │ ├── flags.go
│ │ │ │ ├── proto_legacy_disable.go
│ │ │ │ └── proto_legacy_enable.go
│ │ │ ├── genid/
│ │ │ │ ├── any_gen.go
│ │ │ │ ├── api_gen.go
│ │ │ │ ├── descriptor_gen.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── duration_gen.go
│ │ │ │ ├── empty_gen.go
│ │ │ │ ├── field_mask_gen.go
│ │ │ │ ├── go_features_gen.go
│ │ │ │ ├── goname.go
│ │ │ │ ├── map_entry.go
│ │ │ │ ├── name.go
│ │ │ │ ├── source_context_gen.go
│ │ │ │ ├── struct_gen.go
│ │ │ │ ├── timestamp_gen.go
│ │ │ │ ├── type_gen.go
│ │ │ │ ├── wrappers.go
│ │ │ │ └── wrappers_gen.go
│ │ │ ├── impl/
│ │ │ │ ├── api_export.go
│ │ │ │ ├── api_export_opaque.go
│ │ │ │ ├── bitmap.go
│ │ │ │ ├── bitmap_race.go
│ │ │ │ ├── checkinit.go
│ │ │ │ ├── codec_extension.go
│ │ │ │ ├── codec_field.go
│ │ │ │ ├── codec_field_opaque.go
│ │ │ │ ├── codec_gen.go
│ │ │ │ ├── codec_map.go
│ │ │ │ ├── codec_message.go
│ │ │ │ ├── codec_message_opaque.go
│ │ │ │ ├── codec_messageset.go
│ │ │ │ ├── codec_tables.go
│ │ │ │ ├── codec_unsafe.go
│ │ │ │ ├── convert.go
│ │ │ │ ├── convert_list.go
│ │ │ │ ├── convert_map.go
│ │ │ │ ├── decode.go
│ │ │ │ ├── encode.go
│ │ │ │ ├── enum.go
│ │ │ │ ├── equal.go
│ │ │ │ ├── extension.go
│ │ │ │ ├── lazy.go
│ │ │ │ ├── legacy_enum.go
│ │ │ │ ├── legacy_export.go
│ │ │ │ ├── legacy_extension.go
│ │ │ │ ├── legacy_file.go
│ │ │ │ ├── legacy_message.go
│ │ │ │ ├── merge.go
│ │ │ │ ├── merge_gen.go
│ │ │ │ ├── message.go
│ │ │ │ ├── message_opaque.go
│ │ │ │ ├── message_opaque_gen.go
│ │ │ │ ├── message_reflect.go
│ │ │ │ ├── message_reflect_field.go
│ │ │ │ ├── message_reflect_field_gen.go
│ │ │ │ ├── message_reflect_gen.go
│ │ │ │ ├── pointer_unsafe.go
│ │ │ │ ├── pointer_unsafe_opaque.go
│ │ │ │ ├── presence.go
│ │ │ │ └── validate.go
│ │ │ ├── order/
│ │ │ │ ├── order.go
│ │ │ │ └── range.go
│ │ │ ├── pragma/
│ │ │ │ └── pragma.go
│ │ │ ├── protolazy/
│ │ │ │ ├── bufferreader.go
│ │ │ │ ├── lazy.go
│ │ │ │ └── pointer_unsafe.go
│ │ │ ├── set/
│ │ │ │ └── ints.go
│ │ │ ├── strs/
│ │ │ │ ├── strings.go
│ │ │ │ └── strings_unsafe.go
│ │ │ └── version/
│ │ │ └── version.go
│ │ ├── proto/
│ │ │ ├── checkinit.go
│ │ │ ├── decode.go
│ │ │ ├── decode_gen.go
│ │ │ ├── doc.go
│ │ │ ├── encode.go
│ │ │ ├── encode_gen.go
│ │ │ ├── equal.go
│ │ │ ├── extension.go
│ │ │ ├── merge.go
│ │ │ ├── messageset.go
│ │ │ ├── proto.go
│ │ │ ├── proto_methods.go
│ │ │ ├── proto_reflect.go
│ │ │ ├── reset.go
│ │ │ ├── size.go
│ │ │ ├── size_gen.go
│ │ │ ├── wrapperopaque.go
│ │ │ └── wrappers.go
│ │ ├── protoadapt/
│ │ │ └── convert.go
│ │ ├── reflect/
│ │ │ ├── protodesc/
│ │ │ │ ├── desc.go
│ │ │ │ ├── desc_init.go
│ │ │ │ ├── desc_resolve.go
│ │ │ │ ├── desc_validate.go
│ │ │ │ ├── editions.go
│ │ │ │ └── proto.go
│ │ │ ├── protoreflect/
│ │ │ │ ├── methods.go
│ │ │ │ ├── proto.go
│ │ │ │ ├── source.go
│ │ │ │ ├── source_gen.go
│ │ │ │ ├── type.go
│ │ │ │ ├── value.go
│ │ │ │ ├── value_equal.go
│ │ │ │ ├── value_union.go
│ │ │ │ └── value_unsafe.go
│ │ │ └── protoregistry/
│ │ │ └── registry.go
│ │ ├── runtime/
│ │ │ ├── protoiface/
│ │ │ │ ├── legacy.go
│ │ │ │ └── methods.go
│ │ │ └── protoimpl/
│ │ │ ├── impl.go
│ │ │ └── version.go
│ │ └── types/
│ │ ├── descriptorpb/
│ │ │ └── descriptor.pb.go
│ │ ├── gofeaturespb/
│ │ │ └── go_features.pb.go
│ │ └── known/
│ │ ├── anypb/
│ │ │ └── any.pb.go
│ │ ├── durationpb/
│ │ │ └── duration.pb.go
│ │ └── timestamppb/
│ │ └── timestamp.pb.go
│ ├── gopkg.in/
│ │ └── yaml.v3/
│ │ ├── LICENSE
│ │ ├── NOTICE
│ │ ├── README.md
│ │ ├── apic.go
│ │ ├── decode.go
│ │ ├── emitterc.go
│ │ ├── encode.go
│ │ ├── parserc.go
│ │ ├── readerc.go
│ │ ├── resolve.go
│ │ ├── scannerc.go
│ │ ├── sorter.go
│ │ ├── writerc.go
│ │ ├── yaml.go
│ │ ├── yamlh.go
│ │ └── yamlprivateh.go
│ └── modules.txt
└── version/
└── version.go
Copy disabled (too large)
Download .txt
Showing preview only (11,742K chars total). Download the full file to get everything.
SYMBOL INDEX (136054 symbols across 2456 files)
FILE: cmd/skopeo/completions.go
function autocompleteImageNames (line 17) | func autocompleteImageNames(cmd *cobra.Command, args []string, toComplet...
function supportedTransportSuggestions (line 48) | func supportedTransportSuggestions() []string {
FILE: cmd/skopeo/copy.go
type copyOptions (line 22) | type copyOptions struct
method run (line 112) | func (opts *copyOptions) run(args []string, stdout io.Writer) (retErr ...
function copyCmd (line 41) | func copyCmd(global *globalOptions) *cobra.Command {
function parseMultiArch (line 93) | func parseMultiArch(multiArch string) (copy.ImageListSelection, error) {
FILE: cmd/skopeo/copy_test.go
function TestCopy (line 5) | func TestCopy(t *testing.T) {
FILE: cmd/skopeo/delete.go
type deleteOptions (line 15) | type deleteOptions struct
method run (line 50) | func (opts *deleteOptions) run(args []string, stdout io.Writer) error {
function deleteCmd (line 21) | func deleteCmd(global *globalOptions) *cobra.Command {
FILE: cmd/skopeo/generate_sigstore_key.go
type generateSigstoreKeyOptions (line 15) | type generateSigstoreKeyOptions struct
method run (line 48) | func (opts *generateSigstoreKeyOptions) run(args []string, stdout io.W...
function generateSigstoreKeyCmd (line 20) | func generateSigstoreKeyCmd() *cobra.Command {
function ensurePathDoesNotExist (line 37) | func ensurePathDoesNotExist(path string) error {
FILE: cmd/skopeo/generate_sigstore_key_test.go
function TestGenerateSigstoreKey (line 12) | func TestGenerateSigstoreKey(t *testing.T) {
FILE: cmd/skopeo/inspect.go
type inspectOptions (line 25) | type inspectOptions struct
method run (line 73) | func (opts *inspectOptions) run(args []string, stdout io.Writer) (retE...
method writeOutput (line 225) | func (opts *inspectOptions) writeOutput(stdout io.Writer, data any) er...
function inspectCmd (line 36) | func inspectCmd(global *globalOptions) *cobra.Command {
function manifestDigestFromManifest (line 242) | func manifestDigestFromManifest(manifestBlob []byte, img types.Image, us...
type algorithmValue (line 262) | type algorithmValue
method Set (line 268) | func (a *algorithmValue) Set(value string) error {
method String (line 279) | func (a *algorithmValue) String() string {
method Type (line 283) | func (a *algorithmValue) Type() string {
function newAlgorithmValue (line 264) | func newAlgorithmValue(alg *digest.Algorithm) *algorithmValue {
FILE: cmd/skopeo/inspect/output.go
type Output (line 12) | type Output struct
FILE: cmd/skopeo/layers.go
type layersOptions (line 19) | type layersOptions struct
method run (line 48) | func (opts *layersOptions) run(args []string, stdout io.Writer) (retEr...
function layersCmd (line 25) | func layersCmd(global *globalOptions) *cobra.Command {
FILE: cmd/skopeo/list_tags.go
type tagListOutput (line 23) | type tagListOutput struct
type tagsOptions (line 28) | type tagsOptions struct
method run (line 161) | func (opts *tagsOptions) run(args []string, stdout io.Writer) (retErr ...
function supportedTransports (line 40) | func supportedTransports(joinStr string) string {
function tagsCmd (line 45) | func tagsCmd(global *globalOptions) *cobra.Command {
function parseDockerRepositoryReference (line 79) | func parseDockerRepositoryReference(refString string) (types.ImageRefere...
function listDockerTags (line 99) | func listDockerTags(ctx context.Context, sys *types.SystemContext, imgRe...
function listDockerRepoTags (line 110) | func listDockerRepoTags(ctx context.Context, sys *types.SystemContext, o...
function listDockerArchiveTags (line 126) | func listDockerArchiveTags(_ context.Context, sys *types.SystemContext, ...
FILE: cmd/skopeo/list_tags_test.go
function TestDockerRepositoryReferenceParser (line 12) | func TestDockerRepositoryReferenceParser(t *testing.T) {
function TestDockerRepositoryReferenceParserDrift (line 42) | func TestDockerRepositoryReferenceParserDrift(t *testing.T) {
function TestListTags (line 58) | func TestListTags(t *testing.T) {
FILE: cmd/skopeo/login.go
type loginOptions (line 13) | type loginOptions struct
method run (line 37) | func (opts *loginOptions) run(args []string, stdout io.Writer) error {
function loginCmd (line 19) | func loginCmd(global *globalOptions) *cobra.Command {
FILE: cmd/skopeo/login_test.go
function TestLogin (line 8) | func TestLogin(t *testing.T) {
FILE: cmd/skopeo/logout.go
type logoutOptions (line 12) | type logoutOptions struct
method run (line 36) | func (opts *logoutOptions) run(args []string, stdout io.Writer) error {
function logoutCmd (line 18) | func logoutCmd(global *globalOptions) *cobra.Command {
FILE: cmd/skopeo/logout_test.go
function TestLogout (line 11) | func TestLogout(t *testing.T) {
FILE: cmd/skopeo/main.go
type globalOptions (line 22) | type globalOptions struct
method before (line 136) | func (opts *globalOptions) before(cmd *cobra.Command, args []string) e...
method getPolicyContext (line 164) | func (opts *globalOptions) getPolicyContext() (*signature.PolicyContex...
method commandTimeoutContext (line 198) | func (opts *globalOptions) commandTimeoutContext() (context.Context, c...
method newSystemContext (line 209) | func (opts *globalOptions) newSystemContext() (*types.SystemContext, e...
function requireSubcommand (line 43) | func requireSubcommand(cmd *cobra.Command, args []string) error {
function createApp (line 55) | func createApp() (*cobra.Command, *globalOptions) {
function gitCommit (line 122) | func gitCommit() string {
function main (line 149) | func main() {
FILE: cmd/skopeo/main_test.go
function runSkopeo (line 15) | func runSkopeo(args ...string) (string, error) {
function TestGlobalOptionsNewSystemContext (line 24) | func TestGlobalOptionsNewSystemContext(t *testing.T) {
FILE: cmd/skopeo/manifest.go
type manifestDigestOptions (line 13) | type manifestDigestOptions struct
method run (line 27) | func (opts *manifestDigestOptions) run(args []string, stdout io.Writer...
function manifestDigestCmd (line 15) | func manifestDigestCmd() *cobra.Command {
FILE: cmd/skopeo/manifest_test.go
function TestManifestDigest (line 9) | func TestManifestDigest(t *testing.T) {
FILE: cmd/skopeo/proxy.go
type proxyOptions (line 19) | type proxyOptions struct
method run (line 48) | func (opts *proxyOptions) run(args []string, stdout io.Writer) error {
function proxyCmd (line 25) | func proxyCmd(global *globalOptions) *cobra.Command {
FILE: cmd/skopeo/proxy_windows.go
type proxyOptions (line 12) | type proxyOptions struct
method run (line 27) | func (opts *proxyOptions) run(args []string, stdout io.Writer) error {
function proxyCmd (line 16) | func proxyCmd(global *globalOptions) *cobra.Command {
FILE: cmd/skopeo/signing.go
type standaloneSignOptions (line 16) | type standaloneSignOptions struct
method run (line 35) | func (opts *standaloneSignOptions) run(args []string, stdout io.Writer...
function standaloneSignCmd (line 21) | func standaloneSignCmd() *cobra.Command {
type standaloneVerifyOptions (line 70) | type standaloneVerifyOptions struct
method run (line 90) | func (opts *standaloneVerifyOptions) run(args []string, stdout io.Writ...
function standaloneVerifyCmd (line 74) | func standaloneVerifyCmd() *cobra.Command {
type untrustedSignatureDumpOptions (line 149) | type untrustedSignatureDumpOptions struct
method run (line 163) | func (opts *untrustedSignatureDumpOptions) run(args []string, stdout i...
function untrustedSignatureDumpCmd (line 151) | func untrustedSignatureDumpCmd() *cobra.Command {
FILE: cmd/skopeo/signing_test.go
constant fixturesTestImageManifestDigest (line 18) | fixturesTestImageManifestDigest = digest.Digest("sha256:20bf21ed457b3908...
constant fixturesTestKeyFingerprint (line 20) | fixturesTestKeyFingerprint = "08CD26E446E2E95249B7A405E932F44B23E8DD43"
constant fixturesTestKeyShortID (line 22) | fixturesTestKeyShortID = "E932F44B23E8DD43"
function assertTestFailed (line 27) | func assertTestFailed(t *testing.T, stdout string, err error, substring ...
function TestStandaloneSign (line 32) | func TestStandaloneSign(t *testing.T) {
function TestStandaloneVerify (line 95) | func TestStandaloneVerify(t *testing.T) {
function TestUntrustedSignatureDump (line 158) | func TestUntrustedSignatureDump(t *testing.T) {
FILE: cmd/skopeo/sync.go
type syncOptions (line 32) | type syncOptions struct
method run (line 588) | func (opts *syncOptions) run(args []string, stdout io.Writer) (retErr ...
type repoDescriptor (line 50) | type repoDescriptor struct
type tlsVerifyConfig (line 58) | type tlsVerifyConfig struct
method UnmarshalYAML (line 129) | func (tls *tlsVerifyConfig) UnmarshalYAML(value *yaml.Node) error {
type registrySyncConfig (line 64) | type registrySyncConfig struct
type sourceConfig (line 74) | type sourceConfig
function syncCmd (line 76) | func syncCmd(global *globalOptions) *cobra.Command {
function newSourceConfig (line 141) | func newSourceConfig(yamlFile string) (sourceConfig, error) {
function parseRepositoryReference (line 155) | func parseRepositoryReference(input string) (reference.Named, error) {
function destinationReference (line 169) | func destinationReference(destination string, transport string) (types.I...
function getImageTags (line 204) | func getImageTags(ctx context.Context, sysCtx *types.SystemContext, repo...
function imagesToCopyFromRepo (line 227) | func imagesToCopyFromRepo(sys *types.SystemContext, repoRef reference.Na...
function imagesToCopyFromDir (line 256) | func imagesToCopyFromDir(dirPath string) ([]types.ImageReference, error) {
function imagesToCopyFromRegistry (line 286) | func imagesToCopyFromRegistry(registryName string, cfg registrySyncConfi...
type filterFunc (line 400) | type filterFunc
type filterCollection (line 403) | type filterCollection
function filterSourceReferences (line 408) | func filterSourceReferences(sys *types.SystemContext, registryName strin...
function tagRegexFilterCollection (line 458) | func tagRegexFilterCollection(collection map[string]string) (filterColle...
function semverFilterCollection (line 484) | func semverFilterCollection(collection map[string]string) (filterCollect...
function imagesToCopy (line 518) | func imagesToCopy(source string, transport string, sourceCtx *types.Syst...
FILE: cmd/skopeo/sync_test.go
function TestTLSVerifyConfig (line 15) | func TestTLSVerifyConfig(t *testing.T) {
function TestSync (line 49) | func TestSync(t *testing.T) {
function TestSyncTLSPrecedence (line 65) | func TestSyncTLSPrecedence(t *testing.T) {
FILE: cmd/skopeo/unshare.go
function reexecIfNecessaryForImages (line 5) | func reexecIfNecessaryForImages(_ ...string) error {
FILE: cmd/skopeo/unshare_linux.go
function maybeReexec (line 22) | func maybeReexec() error {
function reexecIfNecessaryForImages (line 43) | func reexecIfNecessaryForImages(imageNames ...string) error {
FILE: cmd/skopeo/utils.go
type errorShouldDisplayUsage (line 37) | type errorShouldDisplayUsage struct
function noteCloseFailure (line 50) | func noteCloseFailure(err error, description string, closeErr error) err...
function commandAction (line 67) | func commandAction(handler func(args []string, stdout io.Writer) error) ...
type deprecatedTLSVerifyOption (line 84) | type deprecatedTLSVerifyOption struct
method warnIfUsed (line 92) | func (opts *deprecatedTLSVerifyOption) warnIfUsed(alternatives []strin...
function deprecatedTLSVerifyFlags (line 100) | func deprecatedTLSVerifyFlags() (pflag.FlagSet, *deprecatedTLSVerifyOpti...
type sharedImageOptions (line 110) | type sharedImageOptions struct
function sharedImageFlags (line 115) | func sharedImageFlags() (pflag.FlagSet, *sharedImageOptions) {
type dockerImageOptions (line 125) | type dockerImageOptions struct
type imageOptions (line 141) | type imageOptions struct
method newSystemContext (line 200) | func (opts *imageOptions) newSystemContext() (*types.SystemContext, er...
function dockerImageFlags (line 149) | func dockerImageFlags(global *globalOptions, shared *sharedImageOptions,...
function imageFlags (line 180) | func imageFlags(global *globalOptions, shared *sharedImageOptions, depre...
function retryFlags (line 190) | func retryFlags() (pflag.FlagSet, *retry.Options) {
type imageDestOptions (line 265) | type imageDestOptions struct
method newSystemContext (line 295) | func (opts *imageDestOptions) newSystemContext() (*types.SystemContext...
method warnAboutIneffectiveOptions (line 321) | func (opts *imageDestOptions) warnAboutIneffectiveOptions(destTranspor...
function imageDestFlags (line 278) | func imageDestFlags(global *globalOptions, shared *sharedImageOptions, d...
type sharedCopyOptions (line 333) | type sharedCopyOptions struct
method copyOptions (line 361) | func (opts *sharedCopyOptions) copyOptions(stdout io.Writer) (*copy.Op...
function sharedCopyFlags (line 345) | func sharedCopyFlags() (pflag.FlagSet, *sharedCopyOptions) {
function parseCreds (line 469) | func parseCreds(creds string) (string, string, error) {
function getDockerAuth (line 480) | func getDockerAuth(creds string) (*types.DockerAuthConfig, error) {
function parseImageSource (line 493) | func parseImageSource(ctx context.Context, opts *imageOptions, name stri...
function parseManifestFormat (line 507) | func parseManifestFormat(manifestFormat string) (string, error) {
constant usageTemplate (line 523) | usageTemplate = `Usage:{{if .Runnable}}
function adjustUsage (line 544) | func adjustUsage(c *cobra.Command) {
function promptForPassphrase (line 550) | func promptForPassphrase(privateKeyFile string, stdin, stdout *os.File) ...
function isNotFoundImageError (line 569) | func isNotFoundImageError(err error) bool {
function isDockerManifestUnknownError (line 580) | func isDockerManifestUnknownError(err error) bool {
FILE: cmd/skopeo/utils_nosequoia_test.go
constant buildWithSequoia (line 5) | buildWithSequoia = false
FILE: cmd/skopeo/utils_sequoia_test.go
constant buildWithSequoia (line 5) | buildWithSequoia = true
FILE: cmd/skopeo/utils_test.go
function TestNoteCloseFailure (line 20) | func TestNoteCloseFailure(t *testing.T) {
function fakeGlobalOptions (line 42) | func fakeGlobalOptions(t *testing.T, flags []string) (*globalOptions, *c...
function fakeImageOptions (line 52) | func fakeImageOptions(t *testing.T, flagPrefix string, useDeprecatedTLSV...
function TestImageOptionsNewSystemContext (line 73) | func TestImageOptionsNewSystemContext(t *testing.T) {
function fakeImageDestOptions (line 128) | func fakeImageDestOptions(t *testing.T, flagPrefix string, useDeprecated...
function TestImageDestOptionsNewSystemContext (line 149) | func TestImageDestOptionsNewSystemContext(t *testing.T) {
function TestImageOptionsUsernamePassword (line 223) | func TestImageOptionsUsernamePassword(t *testing.T) {
function TestTLSVerifyFlags (line 269) | func TestTLSVerifyFlags(t *testing.T) {
function fakeSharedCopyOptions (line 360) | func fakeSharedCopyOptions(t *testing.T, cmdFlags []string) *sharedCopyO...
function TestSharedCopyOptionsCopyOptions (line 369) | func TestSharedCopyOptionsCopyOptions(t *testing.T) {
function TestParseManifestFormat (line 487) | func TestParseManifestFormat(t *testing.T) {
function TestImageOptionsAuthfileOverride (line 531) | func TestImageOptionsAuthfileOverride(t *testing.T) {
FILE: integration/blocked_test.go
constant blockedRegistriesConf (line 4) | blockedRegistriesConf = "./fixtures/blocked-registries.conf"
constant blockedErrorRegex (line 5) | blockedErrorRegex = `.*registry registry-blocked.com is blocked in .*`
method TestCopyBlockedSource (line 8) | func (s *skopeoSuite) TestCopyBlockedSource() {
method TestCopyBlockedDestination (line 16) | func (s *skopeoSuite) TestCopyBlockedDestination() {
method TestInspectBlocked (line 24) | func (s *skopeoSuite) TestInspectBlocked() {
method TestDeleteBlocked (line 31) | func (s *skopeoSuite) TestDeleteBlocked() {
FILE: integration/check_test.go
constant privateRegistryURL0 (line 15) | privateRegistryURL0 = "127.0.0.1:5000"
constant privateRegistryURL1 (line 16) | privateRegistryURL1 = "127.0.0.1:5001"
function TestSkopeo (line 19) | func TestSkopeo(t *testing.T) {
type skopeoSuite (line 23) | type skopeoSuite struct
method SetupSuite (line 34) | func (s *skopeoSuite) SetupSuite() {
method TearDownSuite (line 42) | func (s *skopeoSuite) TearDownSuite() {
method TestVersion (line 53) | func (s *skopeoSuite) TestVersion() {
method TestCanAuthToPrivateRegistryV2WithoutDockerCfg (line 59) | func (s *skopeoSuite) TestCanAuthToPrivateRegistryV2WithoutDockerCfg() {
method TestNeedAuthToPrivateRegistryV2WithoutDockerCfg (line 65) | func (s *skopeoSuite) TestNeedAuthToPrivateRegistryV2WithoutDockerCfg() {
method TestCertDirInsteadOfCertPath (line 71) | func (s *skopeoSuite) TestCertDirInsteadOfCertPath() {
method TestNoNeedAuthToPrivateRegistryV2ImageNotFound (line 81) | func (s *skopeoSuite) TestNoNeedAuthToPrivateRegistryV2ImageNotFound() {
method TestInspectFailsWhenReferenceIsInvalid (line 89) | func (s *skopeoSuite) TestInspectFailsWhenReferenceIsInvalid() {
method TestLoginLogout (line 94) | func (s *skopeoSuite) TestLoginLogout() {
method TestCopyWithLocalAuth (line 106) | func (s *skopeoSuite) TestCopyWithLocalAuth() {
FILE: integration/copy_test.go
constant v2DockerRegistryURL (line 33) | v2DockerRegistryURL = "localhost:5555"
constant v2s1OnlyDockerRegistryURL (line 34) | v2s1OnlyDockerRegistryURL = "localhost:5556"
constant v2s1SupportedDockerRegistryURL (line 35) | v2s1SupportedDockerRegistryURL = "localhost:5557"
constant knownWindowsOnlyImage (line 36) | knownWindowsOnlyImage = "docker://mcr.microsoft.com/windows/nan...
constant knownListImageRepo (line 37) | knownListImageRepo = "docker://registry.fedoraproject.org/fe...
constant knownListImage (line 38) | knownListImage = knownListImageRepo + ":38"
function TestCopy (line 41) | func TestCopy(t *testing.T) {
type copySuite (line 45) | type copySuite struct
method SetupSuite (line 60) | func (s *copySuite) SetupSuite() {
method TearDownSuite (line 106) | func (s *copySuite) TearDownSuite() {
method policyFixture (line 124) | func (s *copySuite) policyFixture(extraSubstitutions map[string]string...
method TestCopyWithManifestList (line 134) | func (s *copySuite) TestCopyWithManifestList() {
method TestCopyAllWithManifestList (line 140) | func (s *copySuite) TestCopyAllWithManifestList() {
method TestCopyAllWithManifestListRoundTrip (line 146) | func (s *copySuite) TestCopyAllWithManifestListRoundTrip() {
method TestCopyAllWithManifestListConverge (line 161) | func (s *copySuite) TestCopyAllWithManifestListConverge() {
method TestCopyNoneWithManifestList (line 176) | func (s *copySuite) TestCopyNoneWithManifestList() {
method TestCopyWithManifestListConverge (line 190) | func (s *copySuite) TestCopyWithManifestListConverge() {
method TestCopyAllWithManifestListStorageFails (line 205) | func (s *copySuite) TestCopyAllWithManifestListStorageFails() {
method TestCopyWithManifestListStorage (line 213) | func (s *copySuite) TestCopyWithManifestListStorage() {
method TestCopyWithManifestListStorageMultiple (line 226) | func (s *copySuite) TestCopyWithManifestListStorageMultiple() {
method TestCopyWithManifestListDigest (line 240) | func (s *copySuite) TestCopyWithManifestListDigest() {
method TestCopyWithDigestfileOutput (line 258) | func (s *copySuite) TestCopyWithDigestfileOutput() {
method TestCopyWithManifestListStorageDigest (line 270) | func (s *copySuite) TestCopyWithManifestListStorageDigest() {
method TestCopyWithManifestListStorageDigestMultipleArches (line 287) | func (s *copySuite) TestCopyWithManifestListStorageDigestMultipleArche...
method TestCopyWithManifestListStorageDigestMultipleArchesBothUseListDigest (line 304) | func (s *copySuite) TestCopyWithManifestListStorageDigestMultipleArche...
method TestCopyWithManifestListStorageDigestMultipleArchesFirstUsesListDigest (line 325) | func (s *copySuite) TestCopyWithManifestListStorageDigestMultipleArche...
method TestCopyWithManifestListStorageDigestMultipleArchesSecondUsesListDigest (line 360) | func (s *copySuite) TestCopyWithManifestListStorageDigestMultipleArche...
method TestCopyWithManifestListStorageDigestMultipleArchesThirdUsesListDigest (line 395) | func (s *copySuite) TestCopyWithManifestListStorageDigestMultipleArche...
method TestCopyWithManifestListStorageDigestMultipleArchesTagAndDigest (line 430) | func (s *copySuite) TestCopyWithManifestListStorageDigestMultipleArche...
method TestCopyFailsWhenImageOSDoesNotMatchRuntimeOS (line 474) | func (s *copySuite) TestCopyFailsWhenImageOSDoesNotMatchRuntimeOS() {
method TestCopySucceedsWhenImageDoesNotMatchRuntimeButWeOverride (line 481) | func (s *copySuite) TestCopySucceedsWhenImageDoesNotMatchRuntimeButWeO...
method TestCopySimpleAtomicRegistry (line 489) | func (s *copySuite) TestCopySimpleAtomicRegistry() {
method TestCopySimple (line 505) | func (s *copySuite) TestCopySimple() {
method TestCopyEncryption (line 542) | func (s *copySuite) TestCopyEncryption() {
method TestCopyStreaming (line 701) | func (s *copySuite) TestCopyStreaming() {
method TestCopyOCIRoundTrip (line 722) | func (s *copySuite) TestCopyOCIRoundTrip() {
method TestCopySignatures (line 765) | func (s *copySuite) TestCopySignatures() {
method TestCopyDirSignatures (line 823) | func (s *copySuite) TestCopyDirSignatures() {
method TestCopySequoiaSignatures (line 871) | func (s *copySuite) TestCopySequoiaSignatures() {
method TestCopyCompression (line 905) | func (s *copySuite) TestCopyCompression() {
method TestCopyDockerLookaside (line 958) | func (s *copySuite) TestCopyDockerLookaside() {
method TestCopyAtomicExtension (line 1027) | func (s *copySuite) TestCopyAtomicExtension() {
method TestCopyVerifyingMirroredSignatures (line 1085) | func (s *copySuite) TestCopyVerifyingMirroredSignatures() {
method TestCopyNoPanicOnHTTPResponseWithoutTLSVerifyFalse (line 1177) | func (s *copySuite) TestCopyNoPanicOnHTTPResponseWithoutTLSVerifyFalse...
method TestCopySchemaConversion (line 1187) | func (s *copySuite) TestCopySchemaConversion() {
method TestCopyManifestConversion (line 1195) | func (s *copySuite) TestCopyManifestConversion() {
method TestCopyPreserveDigests (line 1220) | func (s *copySuite) TestCopyPreserveDigests() {
method testCopySchemaConversionRegistries (line 1228) | func (s *copySuite) testCopySchemaConversionRegistries(t *testing.T, s...
method TestCopyFailsWhenReferenceIsInvalid (line 1298) | func (s *copySuite) TestCopyFailsWhenReferenceIsInvalid() {
method TestInsecurePolicyAndRequireSignedConflict (line 1303) | func (s *copySuite) TestInsecurePolicyAndRequireSignedConflict() {
method TestRequireSignedAcceptsSignedImage (line 1309) | func (s *copySuite) TestRequireSignedAcceptsSignedImage() {
function matchLayerBlobBinaryType (line 625) | func matchLayerBlobBinaryType(t *testing.T, ociImageDirPath string, cont...
function getFileContentType (line 644) | func getFileContentType(out *os.File) (string, error) {
function assertDirImagesAreEqual (line 655) | func assertDirImagesAreEqual(t *testing.T, dir1, dir2 string) {
function assertSchema1DirImagesAreEqualExceptNames (line 674) | func assertSchema1DirImagesAreEqualExceptNames(t *testing.T, dir1, ref1,...
function findRegularFiles (line 942) | func findRegularFiles(t *testing.T, root string) []string {
method TestCopySrcWithAuth (line 1156) | func (s *skopeoSuite) TestCopySrcWithAuth() {
method TestCopyDestWithAuth (line 1164) | func (s *skopeoSuite) TestCopyDestWithAuth() {
method TestCopySrcAndDestWithAuth (line 1170) | func (s *skopeoSuite) TestCopySrcAndDestWithAuth() {
constant regConfFixture (line 1260) | regConfFixture = "./fixtures/registries.conf"
method TestSuccessCopySrcWithMirror (line 1262) | func (s *skopeoSuite) TestSuccessCopySrcWithMirror() {
method TestFailureCopySrcWithMirrorsUnavailable (line 1270) | func (s *skopeoSuite) TestFailureCopySrcWithMirrorsUnavailable() {
method TestSuccessCopySrcWithMirrorAndPrefix (line 1280) | func (s *skopeoSuite) TestSuccessCopySrcWithMirrorAndPrefix() {
method TestFailureCopySrcWithMirrorAndPrefixUnavailable (line 1288) | func (s *skopeoSuite) TestFailureCopySrcWithMirrorAndPrefixUnavailable() {
FILE: integration/fixtures_info_test.go
constant TestImageManifestDigest (line 5) | TestImageManifestDigest = "sha256:20bf21ed457b390829cdbeec8795a7bea16269...
constant testSequoiaHome (line 7) | testSequoiaHome = "./fixtures"
constant testSequoiaKeyFingerprint (line 10) | testSequoiaKeyFingerprint = "50DDE898DF4E48755C8C2B7AF6F908B6FA48A229"
constant testSequoiaKeyFingerprintWithPassphrase (line 13) | testSequoiaKeyFingerprintWithPassphrase = "1F5825285B785E1DB13BF36D2D11A...
FILE: integration/openshift_shell_test.go
method TestRunShell (line 36) | func (s *copySuite) TestRunShell() {
FILE: integration/openshift_test.go
type openshiftCluster (line 26) | type openshiftCluster struct
method clusterCmd (line 50) | func (cluster *openshiftCluster) clusterCmd(env map[string]string, nam...
method startMaster (line 61) | func (cluster *openshiftCluster) startMaster(t *testing.T) {
method prepareRegistryConfig (line 133) | func (cluster *openshiftCluster) prepareRegistryConfig(t *testing.T) {
method startRegistryProcess (line 158) | func (cluster *openshiftCluster) startRegistryProcess(t *testing.T, po...
method startRegistry (line 185) | func (cluster *openshiftCluster) startRegistry(t *testing.T) {
method ocLoginToProject (line 211) | func (cluster *openshiftCluster) ocLoginToProject(t *testing.T) {
method dockerLogin (line 224) | func (cluster *openshiftCluster) dockerLogin(t *testing.T) {
method relaxImageSignerPermissions (line 248) | func (cluster *openshiftCluster) relaxImageSignerPermissions(t *testin...
method tearDown (line 256) | func (cluster *openshiftCluster) tearDown(t *testing.T) {
function startOpenshiftCluster (line 35) | func startOpenshiftCluster(t *testing.T) *openshiftCluster {
FILE: integration/procutils_linux_test.go
function cmdLifecycleToParentIfPossible (line 10) | func cmdLifecycleToParentIfPossible(c *exec.Cmd) {
FILE: integration/procutils_test.go
function cmdLifecycleToParentIfPossible (line 10) | func cmdLifecycleToParentIfPossible(c *exec.Cmd) {
FILE: integration/proxy_test.go
constant knownNotManifestListedImageX8664 (line 26) | knownNotManifestListedImageX8664 = "docker://quay.io/coreos/11bot"
constant knownNotExtantImage (line 29) | knownNotExtantImage = "docker://quay.io/centos/centos:opensusewindowsubu...
constant expectedProxySemverMajor (line 31) | expectedProxySemverMajor = "0.2"
type request (line 36) | type request struct
type reply (line 44) | type reply struct
constant maxMsgSize (line 56) | maxMsgSize = 32 * 1024
type proxy (line 58) | type proxy struct
method call (line 69) | func (p *proxy) call(method string, args []any) (rval any, fd *pipefd,...
method callNoFd (line 146) | func (p *proxy) callNoFd(method string, args []any) (rval any, err err...
method callReadAllBytes (line 159) | func (p *proxy) callReadAllBytes(method string, args []any) (rval any,...
method callGetRawBlob (line 200) | func (p *proxy) callGetRawBlob(args []any) (rval any, buf []byte, err ...
type pipefd (line 62) | type pipefd struct
type proxyError (line 195) | type proxyError struct
function newProxy (line 264) | func newProxy() (*proxy, error) {
function TestProxy (line 307) | func TestProxy(t *testing.T) {
type proxySuite (line 311) | type proxySuite struct
method TestProxyMetadata (line 476) | func (s *proxySuite) TestProxyMetadata() {
method TestProxyGetBlob (line 500) | func (s *proxySuite) TestProxyGetBlob() {
type byteFetch (line 315) | type byteFetch struct
function runTestMetadataAPIs (line 321) | func runTestMetadataAPIs(p *proxy, img string) error {
function runTestOpenImageOptionalNotFound (line 420) | func runTestOpenImageOptionalNotFound(p *proxy, img string) error {
function runTestGetBlob (line 437) | func runTestGetBlob(p *proxy, img string) error {
FILE: integration/registry_test.go
constant binaryV2 (line 16) | binaryV2 = "registry"
constant binaryV2Schema1Only (line 17) | binaryV2Schema1Only = "registry-v2-schema1-only"
constant binaryV2Schema1Supported (line 18) | binaryV2Schema1Supported = "registry-v2-schema1-supported"
type registryVersion (line 21) | type registryVersion
constant registryVersionInvalid (line 24) | registryVersionInvalid registryVersion = iota
constant registryVersionModern (line 25) | registryVersionModern
constant registryVersionSchema1Only (line 26) | registryVersionSchema1Only
constant registryVersionSchema1Supported (line 27) | registryVersionSchema1Supported
type testRegistryV2 (line 30) | type testRegistryV2 struct
method Ping (line 129) | func (r *testRegistryV2) Ping() error {
method tearDown (line 142) | func (r *testRegistryV2) tearDown() {
function setupRegistryV2At (line 38) | func setupRegistryV2At(t *testing.T, url string, auth bool, version regi...
function newTestRegistryV2At (line 56) | func newTestRegistryV2At(t *testing.T, url string, auth bool, version re...
FILE: integration/signing_test.go
constant gpgBinary (line 15) | gpgBinary = "gpg"
function TestSigning (line 18) | func TestSigning(t *testing.T) {
type signingSuite (line 22) | type signingSuite struct
method SetupSuite (line 29) | func (s *signingSuite) SetupSuite() {
method TestSignVerifySmoke (line 45) | func (s *signingSuite) TestSignVerifySmoke() {
FILE: integration/sync_test.go
constant pullableRepo (line 28) | pullableRepo = "registry.k8s.io/coredns/coredns"
constant pullableTaggedImage (line 30) | pullableTaggedImage = "registry.k8s.io/coredns/coredns:v1.6.6"
constant pullableTaggedManifestList (line 32) | pullableTaggedManifestList = "registry.k8s.io/coredns/coredns:v1.8.0"
constant pullableRepoWithLatestTag (line 36) | pullableRepoWithLatestTag = "registry.k8s.io/pause"
function TestSync (line 39) | func TestSync(t *testing.T) {
type syncSuite (line 43) | type syncSuite struct
method SetupSuite (line 54) | func (s *syncSuite) SetupSuite() {
method TearDownSuite (line 99) | func (s *syncSuite) TearDownSuite() {
method TestDocker2DirTagged (line 129) | func (s *syncSuite) TestDocker2DirTagged() {
method TestDocker2DirTaggedAll (line 156) | func (s *syncSuite) TestDocker2DirTaggedAll() {
method TestPreserveDigests (line 183) | func (s *syncSuite) TestPreserveDigests() {
method TestScoped (line 199) | func (s *syncSuite) TestScoped() {
method TestDirIsNotOverwritten (line 217) | func (s *syncSuite) TestDirIsNotOverwritten() {
method TestDocker2DirUntagged (line 246) | func (s *syncSuite) TestDocker2DirUntagged() {
method TestYamlUntagged (line 269) | func (s *syncSuite) TestYamlUntagged() {
method TestYamlRegex2Dir (line 320) | func (s *syncSuite) TestYamlRegex2Dir() {
method TestYamlDigest2Dir (line 341) | func (s *syncSuite) TestYamlDigest2Dir() {
method TestYaml2Dir (line 359) | func (s *syncSuite) TestYaml2Dir() {
method TestYamlTLSVerify (line 398) | func (s *syncSuite) TestYamlTLSVerify() {
method TestSyncManifestOutput (line 452) | func (s *syncSuite) TestSyncManifestOutput() {
method TestDocker2DockerTagged (line 471) | func (s *syncSuite) TestDocker2DockerTagged() {
method TestDir2DockerTagged (line 503) | func (s *syncSuite) TestDir2DockerTagged() {
method TestFailsWithDir2Dir (line 544) | func (s *syncSuite) TestFailsWithDir2Dir() {
method TestFailsNoSourceImages (line 555) | func (s *syncSuite) TestFailsNoSourceImages() {
method TestFailsWithDockerSourceNoRegistry (line 566) | func (s *syncSuite) TestFailsWithDockerSourceNoRegistry() {
method TestFailsWithDockerSourceUnauthorized (line 581) | func (s *syncSuite) TestFailsWithDockerSourceUnauthorized() {
method TestFailsWithDockerSourceNotExisting (line 595) | func (s *syncSuite) TestFailsWithDockerSourceNotExisting() {
method TestFailsWithDirSourceNotExisting (line 609) | func (s *syncSuite) TestFailsWithDirSourceNotExisting() {
function assertNumberOfManifestsInSubdirs (line 113) | func assertNumberOfManifestsInSubdirs(t *testing.T, dir string, expected...
FILE: integration/tls_test.go
function TestTLS (line 27) | func TestTLS(t *testing.T) {
type tlsSuite (line 31) | type tlsSuite struct
method SetupSuite (line 52) | func (s *tlsSuite) SetupSuite() {
method TearDownSuite (line 134) | func (s *tlsSuite) TearDownSuite() {
method TestDockerDaemon (line 137) | func (s *tlsSuite) TestDockerDaemon() {
method TestRegistry (line 178) | func (s *tlsSuite) TestRegistry() {
method TestOCILayout (line 191) | func (s *tlsSuite) TestOCILayout() {
method TestOpenShift (line 238) | func (s *tlsSuite) TestOpenShift() {
type expectedBehavior (line 46) | type expectedBehavior struct
type tlsConfigServer (line 271) | type tlsConfigServer struct
function newServer (line 278) | func newServer(t *testing.T, config *tls.Config) *tlsConfigServer {
FILE: integration/user_agent_test.go
type mockRegistryHandler (line 15) | type mockRegistryHandler struct
method ServeHTTP (line 20) | func (h *mockRegistryHandler) ServeHTTP(w http.ResponseWriter, r *http...
method getUserAgents (line 48) | func (h *mockRegistryHandler) getUserAgents() []string {
function TestUserAgent (line 54) | func TestUserAgent(t *testing.T) {
FILE: integration/utils_test.go
function findFingerprint (line 34) | func findFingerprint(lineBytes []byte) (string, error) {
constant testFQIN (line 45) | testFQIN = "docker://quay.io/libpod/busybox"
constant testFQIN64 (line 46) | testFQIN64 = "docker://quay.io/libpod/busybox:amd64"
constant testFQINMultiLayer (line 47) | testFQINMultiLayer = "docker://quay.io/libpod/alpine_nginx:latest"
function consumeAndLogOutputStream (line 51) | func consumeAndLogOutputStream(t *testing.T, id string, f io.ReadCloser,...
function consumeAndLogOutputs (line 71) | func consumeAndLogOutputs(t *testing.T, id string, cmd *exec.Cmd) {
function combinedOutputOfCommand (line 80) | func combinedOutputOfCommand(t *testing.T, name string, args ...string) ...
function assertSkopeoSucceeds (line 89) | func assertSkopeoSucceeds(t *testing.T, regexp string, args ...string) {
function assertSkopeoFails (line 100) | func assertSkopeoFails(t *testing.T, regexp string, args ...string) {
function assertSkopeoFailsWithStatus (line 109) | func assertSkopeoFailsWithStatus(t *testing.T, status int, args ...strin...
function runCommandWithInput (line 119) | func runCommandWithInput(t *testing.T, input string, name string, args ....
function runExecCmdWithInput (line 126) | func runExecCmdWithInput(t *testing.T, cmd *exec.Cmd, input string) {
function isPortOpen (line 142) | func isPortOpen(port uint16) bool {
function newPortChecker (line 156) | func newPortChecker(t *testing.T, port uint16) (portOpen <-chan bool, te...
function modifyEnviron (line 187) | func modifyEnviron(env []string, name, value string) []string {
function fileFromFixture (line 200) | func fileFromFixture(t *testing.T, inputPath string, edits map[string]st...
function decompressDirs (line 217) | func decompressDirs(t *testing.T, dirs ...string) {
function getRawMapField (line 234) | func getRawMapField[T any](t *testing.T, rawMap map[string]any, key stri...
function decompressDir (line 244) | func decompressDir(t *testing.T, dir string) {
function verifyManifestMIMEType (line 311) | func verifyManifestMIMEType(t *testing.T, dir string, expectedMIMEType s...
FILE: vendor/cyphar.com/go-pathrs/handle_linux.go
type Handle (line 36) | type Handle struct
method Open (line 62) | func (h *Handle) Open() (*os.File, error) {
method OpenFile (line 74) | func (h *Handle) OpenFile(flags int) (*os.File, error) {
method IntoFile (line 93) | func (h *Handle) IntoFile() *os.File {
method Clone (line 103) | func (h *Handle) Clone() (*Handle, error) {
method Close (line 108) | func (h *Handle) Close() error {
function HandleFromFile (line 46) | func HandleFromFile(file *os.File) (*Handle, error) {
FILE: vendor/cyphar.com/go-pathrs/internal/fdutils/fd_linux.go
function DupFd (line 28) | func DupFd(fd uintptr, name string) (*os.File, error) {
function WithFileFd (line 37) | func WithFileFd[T any](file *os.File, fn func(fd uintptr) (T, error)) (T...
function DupFile (line 55) | func DupFile(file *os.File) (*os.File, error) {
function MkFile (line 64) | func MkFile(fd uintptr) (*os.File, error) {
FILE: vendor/cyphar.com/go-pathrs/internal/libpathrs/error_unix.go
type Error (line 23) | type Error struct
method Error (line 29) | func (err *Error) Error() string {
method Unwrap (line 35) | func (err *Error) Unwrap() error {
FILE: vendor/cyphar.com/go-pathrs/internal/libpathrs/libpathrs_linux.go
function fetchError (line 36) | func fetchError(errID C.int) error {
function OpenRoot (line 54) | func OpenRoot(path string) (uintptr, error) {
function Reopen (line 63) | func Reopen(fd uintptr, flags int) (uintptr, error) {
function InRootResolve (line 69) | func InRootResolve(rootFd uintptr, path string) (uintptr, error) {
function InRootResolveNoFollow (line 78) | func InRootResolveNoFollow(rootFd uintptr, path string) (uintptr, error) {
function InRootOpen (line 87) | func InRootOpen(rootFd uintptr, path string, flags int) (uintptr, error) {
function InRootReadlink (line 96) | func InRootReadlink(rootFd uintptr, path string) (string, error) {
function InRootRmdir (line 121) | func InRootRmdir(rootFd uintptr, path string) error {
function InRootUnlink (line 130) | func InRootUnlink(rootFd uintptr, path string) error {
function InRootRemoveAll (line 139) | func InRootRemoveAll(rootFd uintptr, path string) error {
function InRootCreat (line 148) | func InRootCreat(rootFd uintptr, path string, flags int, mode uint32) (u...
function InRootRename (line 157) | func InRootRename(rootFd uintptr, src, dst string, flags uint) error {
function InRootMkdir (line 169) | func InRootMkdir(rootFd uintptr, path string, mode uint32) error {
function InRootMkdirAll (line 178) | func InRootMkdirAll(rootFd uintptr, path string, mode uint32) (uintptr, ...
function InRootMknod (line 187) | func InRootMknod(rootFd uintptr, path string, mode uint32, dev uint64) e...
function InRootSymlink (line 196) | func InRootSymlink(rootFd uintptr, path, target string) error {
function InRootHardlink (line 208) | func InRootHardlink(rootFd uintptr, path, target string) error {
type ProcBase (line 220) | type ProcBase
constant ProcRoot (line 228) | ProcRoot ProcBase = 0xFFFF_FFFE_7072_6F63
constant ProcSelf (line 230) | ProcSelf ProcBase = 0xFFFF_FFFE_091D_5E1F
constant ProcThreadSelf (line 232) | ProcThreadSelf ProcBase = 0xFFFF_FFFE_3EAD_5E1F
constant ProcBaseTypeMask (line 235) | ProcBaseTypeMask ProcBase = 0xFFFF_FFFF_0000_0000
constant ProcBaseTypePid (line 237) | ProcBaseTypePid ProcBase = 0x8000_0000_0000_0000
constant ProcDefaultRootFd (line 240) | ProcDefaultRootFd = -int(syscall.EBADF)
function assertEqual (line 243) | func assertEqual[T comparable](a, b T, msg string) {
function init (line 254) | func init() {
function ProcPid (line 277) | func ProcPid(pid uint32) ProcBase { return ProcBaseTypePid | ProcBase(pi...
function ProcOpenat (line 280) | func ProcOpenat(procRootFd int, base ProcBase, path string, flags int) (...
function ProcReadlinkat (line 291) | func ProcReadlinkat(procRootFd int, base ProcBase, path string) (string,...
type ProcfsOpenHow (line 322) | type ProcfsOpenHow
method Flags (line 331) | func (how *ProcfsOpenHow) Flags() *C.uint64_t { return &how.flags }
constant ProcfsNewUnmasked (line 326) | ProcfsNewUnmasked = C.PATHRS_PROCFS_NEW_UNMASKED
function ProcfsOpen (line 334) | func ProcfsOpen(how *ProcfsOpenHow) (uintptr, error) {
FILE: vendor/cyphar.com/go-pathrs/procfs/procfs_linux.go
type ProcBase (line 27) | type ProcBase struct
function ProcPid (line 58) | func ProcPid(pid int) ProcBase {
type ThreadCloser (line 68) | type ThreadCloser
type Handle (line 72) | type Handle struct
method Close (line 80) | func (proc *Handle) Close() error {
method fd (line 122) | func (proc *Handle) fd() int {
method open (line 130) | func (proc *Handle) open(base ProcBase, path string, flags int) (_ *os...
method OpenRoot (line 157) | func (proc *Handle) OpenRoot(path string, flags int) (*os.File, error) {
method OpenSelf (line 183) | func (proc *Handle) OpenSelf(path string, flags int) (*os.File, error) {
method OpenPid (line 201) | func (proc *Handle) OpenPid(pid int, path string, flags int) (*os.File...
method OpenThreadSelf (line 228) | func (proc *Handle) OpenThreadSelf(path string, flags int) (*os.File, ...
method Readlink (line 237) | func (proc *Handle) Readlink(base ProcBase, path string) (string, erro...
type OpenOption (line 89) | type OpenOption
function UnmaskedProcRoot (line 95) | func UnmaskedProcRoot(how *libpathrs.ProcfsOpenHow) error {
function Open (line 102) | func Open(opts ...OpenOption) (*Handle, error) {
FILE: vendor/cyphar.com/go-pathrs/root_linux.go
type Root (line 35) | type Root struct
method Resolve (line 72) | func (r *Root) Resolve(path string) (*Handle, error) {
method ResolveNoFollow (line 90) | func (r *Root) ResolveNoFollow(path string) (*Handle, error) {
method Open (line 110) | func (r *Root) Open(path string) (*os.File, error) {
method OpenFile (line 126) | func (r *Root) OpenFile(path string, flags int) (*os.File, error) {
method Create (line 142) | func (r *Root) Create(path string, flags int, mode os.FileMode) (*os.F...
method Rename (line 158) | func (r *Root) Rename(src, dst string, flags uint) error {
method RemoveDir (line 168) | func (r *Root) RemoveDir(path string) error {
method RemoveFile (line 177) | func (r *Root) RemoveFile(path string) error {
method Remove (line 189) | func (r *Root) Remove(path string) error {
method RemoveAll (line 212) | func (r *Root) RemoveAll(path string) error {
method Mkdir (line 224) | func (r *Root) Mkdir(path string, mode os.FileMode) error {
method MkdirAll (line 242) | func (r *Root) MkdirAll(path string, mode os.FileMode) (*Handle, error) {
method Mknod (line 266) | func (r *Root) Mknod(path string, mode os.FileMode, dev uint64) error {
method Symlink (line 283) | func (r *Root) Symlink(path, target string) error {
method Hardlink (line 297) | func (r *Root) Hardlink(path, target string) error {
method Readlink (line 308) | func (r *Root) Readlink(path string) (string, error) {
method IntoFile (line 324) | func (r *Root) IntoFile() *os.File {
method Clone (line 334) | func (r *Root) Clone() (*Root, error) {
method Close (line 339) | func (r *Root) Close() error {
function OpenRoot (line 40) | func OpenRoot(path string) (*Root, error) {
function RootFromFile (line 57) | func RootFromFile(file *os.File) (*Root, error) {
FILE: vendor/cyphar.com/go-pathrs/utils_linux.go
function toUnixMode (line 24) | func toUnixMode(mode os.FileMode, needsType bool) (uint32, error) {
FILE: vendor/dario.cat/mergo/map.go
function changeInitialCase (line 18) | func changeInitialCase(s string, mapper func(rune) rune) string {
function isExported (line 26) | func isExported(field reflect.StructField) bool {
function deepMap (line 34) | func deepMap(dst, src reflect.Value, visited map[uintptr]*visit, depth i...
function Map (line 132) | func Map(dst, src interface{}, opts ...func(*Config)) error {
function MapWithOverwrite (line 139) | func MapWithOverwrite(dst, src interface{}, opts ...func(*Config)) error {
function _map (line 143) | func _map(dst, src interface{}, opts ...func(*Config)) error {
FILE: vendor/dario.cat/mergo/merge.go
function hasMergeableFields (line 16) | func hasMergeableFields(dst reflect.Value) (exported bool) {
function isExportedComponent (line 28) | func isExportedComponent(field *reflect.StructField) bool {
type Config (line 40) | type Config struct
type Transformers (line 52) | type Transformers interface
function deepMerge (line 59) | func deepMerge(dst, src reflect.Value, visited map[uintptr]*visit, depth...
function Merge (line 318) | func Merge(dst, src interface{}, opts ...func(*Config)) error {
function MergeWithOverwrite (line 325) | func MergeWithOverwrite(dst, src interface{}, opts ...func(*Config)) err...
function WithTransformers (line 330) | func WithTransformers(transformers Transformers) func(*Config) {
function WithOverride (line 337) | func WithOverride(config *Config) {
function WithOverwriteWithEmptyValue (line 342) | func WithOverwriteWithEmptyValue(config *Config) {
function WithOverrideEmptySlice (line 348) | func WithOverrideEmptySlice(config *Config) {
function WithoutDereference (line 354) | func WithoutDereference(config *Config) {
function WithAppendSlice (line 359) | func WithAppendSlice(config *Config) {
function WithTypeCheck (line 364) | func WithTypeCheck(config *Config) {
function WithSliceDeepCopy (line 369) | func WithSliceDeepCopy(config *Config) {
function merge (line 374) | func merge(dst, src interface{}, opts ...func(*Config)) error {
function isReflectNil (line 399) | func isReflectNil(v reflect.Value) bool {
FILE: vendor/dario.cat/mergo/mergo.go
type visit (line 30) | type visit struct
function isEmptyValue (line 37) | func isEmptyValue(v reflect.Value, shouldDereference bool) bool {
function resolveValues (line 65) | func resolveValues(dst, src interface{}) (vDst, vSrc reflect.Value, err ...
FILE: vendor/github.com/BurntSushi/toml/decode.go
type Unmarshaler (line 20) | type Unmarshaler interface
function Unmarshal (line 27) | func Unmarshal(data []byte, v any) error {
function Decode (line 35) | func Decode(data string, v any) (MetaData, error) {
function DecodeFile (line 40) | func DecodeFile(path string, v any) (MetaData, error) {
function DecodeFS (line 51) | func DecodeFS(fsys fs.FS, path string, v any) (MetaData, error) {
type Primitive (line 71) | type Primitive struct
constant maxSafeFloat32Int (line 79) | maxSafeFloat32Int = 16777215
constant maxSafeFloat64Int (line 80) | maxSafeFloat64Int = int64(9007199254740991)
type Decoder (line 120) | type Decoder struct
method Decode (line 136) | func (dec *Decoder) Decode(v any) (MetaData, error) {
function NewDecoder (line 125) | func NewDecoder(r io.Reader) *Decoder {
method PrimitiveDecode (line 193) | func (md *MetaData) PrimitiveDecode(primValue Primitive, v any) error {
function markDecodedRecursive (line 201) | func markDecodedRecursive(md *MetaData, tmap map[string]any) {
method unify (line 224) | func (md *MetaData) unify(data any, rv reflect.Value) error {
method unifyStruct (line 298) | func (md *MetaData) unifyStruct(mapping any, rv reflect.Value) error {
method unifyMap (line 343) | func (md *MetaData) unifyMap(mapping any, rv reflect.Value) error {
method unifyArray (line 386) | func (md *MetaData) unifyArray(data any, rv reflect.Value) error {
method unifySlice (line 400) | func (md *MetaData) unifySlice(data any, rv reflect.Value) error {
method unifySliceArray (line 416) | func (md *MetaData) unifySliceArray(data, rv reflect.Value) error {
method unifyString (line 427) | func (md *MetaData) unifyString(data any, rv reflect.Value) error {
method unifyFloat64 (line 447) | func (md *MetaData) unifyFloat64(data any, rv reflect.Value) error {
method unifyInt (line 477) | func (md *MetaData) unifyInt(data any, rv reflect.Value) error {
method unifyBool (line 520) | func (md *MetaData) unifyBool(data any, rv reflect.Value) error {
method unifyAnything (line 528) | func (md *MetaData) unifyAnything(data any, rv reflect.Value) error {
method unifyText (line 533) | func (md *MetaData) unifyText(data any, v encoding.TextUnmarshaler) error {
method badtype (line 567) | func (md *MetaData) badtype(dst string, data any) error {
method parseErr (line 571) | func (md *MetaData) parseErr(err error) error {
method e (line 584) | func (md *MetaData) e(format string, args ...any) error {
function rvalue (line 597) | func rvalue(v any) reflect.Value {
function indirect (line 608) | func indirect(v reflect.Value) reflect.Value {
function isUnifiable (line 628) | func isUnifiable(rv reflect.Value) bool {
function fmtType (line 643) | func fmtType(t any) string {
FILE: vendor/github.com/BurntSushi/toml/deprecated.go
type TextMarshaler (line 11) | type TextMarshaler
type TextUnmarshaler (line 16) | type TextUnmarshaler
function DecodeReader (line 21) | func DecodeReader(r io.Reader, v any) (MetaData, error) { return NewDeco...
function PrimitiveDecode (line 26) | func PrimitiveDecode(primValue Primitive, v any) error {
FILE: vendor/github.com/BurntSushi/toml/encode.go
type tomlEncodeError (line 21) | type tomlEncodeError struct
type Marshaler (line 76) | type Marshaler interface
function Marshal (line 83) | func Marshal(v any) ([]byte, error) {
type Encoder (line 129) | type Encoder struct
method Encode (line 144) | func (enc *Encoder) Encode(v any) error {
method safeEncode (line 153) | func (enc *Encoder) safeEncode(key Key, rv reflect.Value) (err error) {
method encode (line 167) | func (enc *Encoder) encode(key Key, rv reflect.Value) {
method eElement (line 217) | func (enc *Encoder) eElement(rv reflect.Value) {
method writeQuoted (line 344) | func (enc *Encoder) writeQuoted(s string) {
method eArrayOrSliceElement (line 348) | func (enc *Encoder) eArrayOrSliceElement(rv reflect.Value) {
method eArrayOfTables (line 361) | func (enc *Encoder) eArrayOfTables(key Key, rv reflect.Value) {
method eTable (line 377) | func (enc *Encoder) eTable(key Key, rv reflect.Value) {
method eMapOrStruct (line 390) | func (enc *Encoder) eMapOrStruct(key Key, rv reflect.Value, inline boo...
method eMap (line 402) | func (enc *Encoder) eMap(key Key, rv reflect.Value, inline bool) {
method eStruct (line 455) | func (enc *Encoder) eStruct(key Key, rv reflect.Value, inline bool) {
method newline (line 706) | func (enc *Encoder) newline() {
method writeKeyValue (line 723) | func (enc *Encoder) writeKeyValue(key Key, val reflect.Value, inline b...
method write (line 737) | func (enc *Encoder) write(s string) {
method writef (line 745) | func (enc *Encoder) writef(format string, v ...any) {
method indentStr (line 753) | func (enc *Encoder) indentStr(key Key) string {
function NewEncoder (line 136) | func NewEncoder(w io.Writer) *Encoder {
function floatAddDecimal (line 332) | func floatAddDecimal(fstr string) string {
function pointerTo (line 448) | func pointerTo(t reflect.Type) reflect.Type {
function tomlTypeOfGo (line 569) | func tomlTypeOfGo(rv reflect.Value) tomlType {
function isMarshaler (line 615) | func isMarshaler(rv reflect.Value) bool {
function isTableArray (line 620) | func isTableArray(arr reflect.Value) bool {
type tagOptions (line 640) | type tagOptions struct
function getOptions (line 647) | func getOptions(tag reflect.StructTag) tagOptions {
function isZero (line 666) | func isZero(rv reflect.Value) bool {
function isEmpty (line 678) | func isEmpty(rv reflect.Value) bool {
function encPanic (line 757) | func encPanic(err error) {
function eindirect (line 762) | func eindirect(v reflect.Value) reflect.Value {
function isNil (line 782) | func isNil(rv reflect.Value) bool {
FILE: vendor/github.com/BurntSushi/toml/error.go
type ParseError (line 52) | type ParseError struct
method Error (line 94) | func (pe ParseError) Error() string {
method ErrorWithPosition (line 105) | func (pe ParseError) ErrorWithPosition() string {
method ErrorWithUsage (line 148) | func (pe ParseError) ErrorWithUsage() string {
type Position (line 68) | type Position struct
method withCol (line 75) | func (p Position) withCol(tomlFile string) Position {
function expandTab (line 162) | func expandTab(s string) string {
type errLexControl (line 190) | type errLexControl struct
method Error (line 207) | func (e errLexControl) Error() string {
method Usage (line 210) | func (e errLexControl) Usage() string { return "" }
type errLexEscape (line 191) | type errLexEscape struct
method Error (line 212) | func (e errLexEscape) Error() string { return fmt.Sprintf(`inva...
method Usage (line 213) | func (e errLexEscape) Usage() string { return usageEscape }
type errLexUTF8 (line 192) | type errLexUTF8 struct
method Error (line 214) | func (e errLexUTF8) Error() string { return fmt.Sprintf("inva...
method Usage (line 215) | func (e errLexUTF8) Usage() string { return "" }
type errParseDate (line 193) | type errParseDate struct
method Error (line 216) | func (e errParseDate) Error() string { return fmt.Sprintf("inva...
method Usage (line 217) | func (e errParseDate) Usage() string { return usageDate }
type errLexInlineTableNL (line 194) | type errLexInlineTableNL struct
method Error (line 218) | func (e errLexInlineTableNL) Error() string { return "newlines not all...
method Usage (line 219) | func (e errLexInlineTableNL) Usage() string { return usageInlineNewline }
type errLexStringNL (line 195) | type errLexStringNL struct
method Error (line 220) | func (e errLexStringNL) Error() string { return "strings cannot c...
method Usage (line 221) | func (e errLexStringNL) Usage() string { return usageStringNewline }
type errParseRange (line 196) | type errParseRange struct
method Error (line 222) | func (e errParseRange) Error() string { return fmt.Sprintf("%v i...
method Usage (line 223) | func (e errParseRange) Usage() string { return usageIntOverflow }
type errUnsafeFloat (line 200) | type errUnsafeFloat struct
method Error (line 224) | func (e errUnsafeFloat) Error() string {
method Usage (line 227) | func (e errUnsafeFloat) Usage() string { return usageUnsafeFloat }
type errParseDuration (line 204) | type errParseDuration struct
method Error (line 228) | func (e errParseDuration) Error() string { return fmt.Sprintf("invalid...
method Usage (line 229) | func (e errParseDuration) Usage() string { return usageDuration }
constant usageEscape (line 231) | usageEscape = `
constant usageInlineNewline (line 246) | usageInlineNewline = `
constant usageStringNewline (line 266) | usageStringNewline = `
constant usageIntOverflow (line 279) | usageIntOverflow = `
constant usageUnsafeFloat (line 299) | usageUnsafeFloat = `
constant usageDuration (line 315) | usageDuration = `
constant usageDate (line 329) | usageDate = `
FILE: vendor/github.com/BurntSushi/toml/lex.go
type itemType (line 12) | type itemType
method String (line 1183) | func (itype itemType) String() string {
constant itemError (line 15) | itemError itemType = iota
constant itemEOF (line 16) | itemEOF
constant itemText (line 17) | itemText
constant itemString (line 18) | itemString
constant itemStringEsc (line 19) | itemStringEsc
constant itemRawString (line 20) | itemRawString
constant itemMultilineString (line 21) | itemMultilineString
constant itemRawMultilineString (line 22) | itemRawMultilineString
constant itemBool (line 23) | itemBool
constant itemInteger (line 24) | itemInteger
constant itemFloat (line 25) | itemFloat
constant itemDatetime (line 26) | itemDatetime
constant itemArray (line 27) | itemArray
constant itemArrayEnd (line 28) | itemArrayEnd
constant itemTableStart (line 29) | itemTableStart
constant itemTableEnd (line 30) | itemTableEnd
constant itemArrayTableStart (line 31) | itemArrayTableStart
constant itemArrayTableEnd (line 32) | itemArrayTableEnd
constant itemKeyStart (line 33) | itemKeyStart
constant itemKeyEnd (line 34) | itemKeyEnd
constant itemCommentStart (line 35) | itemCommentStart
constant itemInlineTableStart (line 36) | itemInlineTableStart
constant itemInlineTableEnd (line 37) | itemInlineTableEnd
constant eof (line 40) | eof = 0
type stateFn (line 42) | type stateFn
method String (line 1172) | func (s stateFn) String() string {
method String (line 44) | func (p Position) String() string {
type lexer (line 48) | type lexer struct
method nextItem (line 79) | func (lx *lexer) nextItem() item {
method push (line 102) | func (lx *lexer) push(state stateFn) {
method pop (line 106) | func (lx *lexer) pop() stateFn {
method current (line 115) | func (lx *lexer) current() string {
method getPos (line 119) | func (lx lexer) getPos() Position {
method emit (line 131) | func (lx *lexer) emit(typ itemType) {
method emitTrim (line 141) | func (lx *lexer) emitTrim(typ itemType) {
method next (line 146) | func (lx *lexer) next() (r rune) {
method ignore (line 183) | func (lx *lexer) ignore() {
method backup (line 188) | func (lx *lexer) backup() {
method accept (line 209) | func (lx *lexer) accept(valid rune) bool {
method peek (line 218) | func (lx *lexer) peek() rune {
method skip (line 225) | func (lx *lexer) skip(pred func(rune) bool) {
method error (line 241) | func (lx *lexer) error(err error) stateFn {
method errorPrevLine (line 253) | func (lx *lexer) errorPrevLine(err error) stateFn {
method errorPos (line 263) | func (lx *lexer) errorPos(start, length int, err error) stateFn {
method errorf (line 272) | func (lx *lexer) errorf(format string, values ...any) stateFn {
method errorControlChar (line 287) | func (lx *lexer) errorControlChar(cc rune) stateFn {
type item (line 72) | type item struct
method String (line 1227) | func (item item) String() string {
function lex (line 91) | func lex(input string) *lexer {
function lexTop (line 292) | func lexTop(lx *lexer) stateFn {
function lexTopEnd (line 323) | func lexTopEnd(lx *lexer) stateFn {
function lexTableStart (line 347) | func lexTableStart(lx *lexer) stateFn {
function lexTableEnd (line 359) | func lexTableEnd(lx *lexer) stateFn {
function lexArrayTableEnd (line 364) | func lexArrayTableEnd(lx *lexer) stateFn {
function lexTableNameStart (line 372) | func lexTableNameStart(lx *lexer) stateFn {
function lexTableNameEnd (line 391) | func lexTableNameEnd(lx *lexer) stateFn {
function lexBareName (line 410) | func lexBareName(lx *lexer) stateFn {
function lexQuotedName (line 424) | func lexQuotedName(lx *lexer) stateFn {
function lexKeyStart (line 445) | func lexKeyStart(lx *lexer) stateFn {
function lexKeyNameStart (line 461) | func lexKeyNameStart(lx *lexer) stateFn {
function lexKeyEnd (line 482) | func lexKeyEnd(lx *lexer) stateFn {
function lexValue (line 506) | func lexValue(lx *lexer) stateFn {
function lexArrayValue (line 575) | func lexArrayValue(lx *lexer) stateFn {
function lexArrayValueEnd (line 597) | func lexArrayValueEnd(lx *lexer) stateFn {
function lexArrayEnd (line 616) | func lexArrayEnd(lx *lexer) stateFn {
function lexInlineTableValue (line 624) | func lexInlineTableValue(lx *lexer) stateFn {
function lexInlineTableValueEnd (line 647) | func lexInlineTableValueEnd(lx *lexer) stateFn {
function runeOrEOF (line 670) | func runeOrEOF(r rune) string {
function lexInlineTableEnd (line 679) | func lexInlineTableEnd(lx *lexer) stateFn {
function lexString (line 687) | func lexString(lx *lexer) stateFn {
function lexMultilineString (line 714) | func lexMultilineString(lx *lexer) stateFn {
function lexRawString (line 770) | func lexRawString(lx *lexer) stateFn {
function lexMultilineRawString (line 791) | func lexMultilineRawString(lx *lexer) stateFn {
function lexMultilineStringEscape (line 834) | func lexMultilineStringEscape(lx *lexer) stateFn {
function lexStringEscape (line 843) | func lexStringEscape(lx *lexer) stateFn {
function lexHexEscape (line 877) | func lexHexEscape(lx *lexer) stateFn {
function lexShortUnicodeEscape (line 888) | func lexShortUnicodeEscape(lx *lexer) stateFn {
function lexLongUnicodeEscape (line 899) | func lexLongUnicodeEscape(lx *lexer) stateFn {
function lexNumberOrDateStart (line 914) | func lexNumberOrDateStart(lx *lexer) stateFn {
function lexNumberOrDate (line 922) | func lexNumberOrDate(lx *lexer) stateFn {
function lexDatetime (line 943) | func lexDatetime(lx *lexer) stateFn {
function lexHexInteger (line 959) | func lexHexInteger(lx *lexer) stateFn {
function lexOctalInteger (line 975) | func lexOctalInteger(lx *lexer) stateFn {
function lexBinaryInteger (line 991) | func lexBinaryInteger(lx *lexer) stateFn {
function lexDecimalNumber (line 1007) | func lexDecimalNumber(lx *lexer) stateFn {
function lexDecimalNumberStart (line 1029) | func lexDecimalNumberStart(lx *lexer) stateFn {
function lexBaseNumberOrDate (line 1066) | func lexBaseNumberOrDate(lx *lexer) stateFn {
function lexFloat (line 1109) | func lexFloat(lx *lexer) stateFn {
function lexBool (line 1125) | func lexBool(lx *lexer) stateFn {
function lexCommentStart (line 1146) | func lexCommentStart(lx *lexer) stateFn {
function lexComment (line 1155) | func lexComment(lx *lexer) stateFn {
function lexSkip (line 1167) | func lexSkip(lx *lexer, nextState stateFn) stateFn {
function isWhitespace (line 1231) | func isWhitespace(r rune) bool { return r == '\t' || r == ' ' }
function isNL (line 1232) | func isNL(r rune) bool { return r == '\n' || r == '\r' }
function isControl (line 1233) | func isControl(r rune) bool { // Control characters except \t, \r, \n
function isDigit (line 1241) | func isDigit(r rune) bool { return r >= '0' && r <= '9' }
function isBinary (line 1242) | func isBinary(r rune) bool { return r == '0' || r == '1' }
function isOctal (line 1243) | func isOctal(r rune) bool { return r >= '0' && r <= '7' }
function isHex (line 1244) | func isHex(r rune) bool { return (r >= '0' && r <= '9') || (r|0x20 >=...
function isBareKeyChar (line 1245) | func isBareKeyChar(r rune) bool {
FILE: vendor/github.com/BurntSushi/toml/meta.go
type MetaData (line 12) | type MetaData struct
method IsDefined (line 28) | func (md *MetaData) IsDefined(key ...string) bool {
method Type (line 53) | func (md *MetaData) Type(key ...string) string {
method Keys (line 67) | func (md *MetaData) Keys() []Key {
method Undecoded (line 82) | func (md *MetaData) Undecoded() []Key {
type Key (line 94) | type Key
method String (line 96) | func (k Key) String() string {
method maybeQuoted (line 123) | func (k Key) maybeQuoted(i int) string {
method add (line 137) | func (k Key) add(piece string) Key {
method parent (line 144) | func (k Key) parent() Key { return k[:len(k)-1] }
method last (line 145) | func (k Key) last() string { return k[len(k)-1] }
FILE: vendor/github.com/BurntSushi/toml/parse.go
type parser (line 14) | type parser struct
method panicErr (line 87) | func (p *parser) panicErr(it item, err error) {
method panicItemf (line 97) | func (p *parser) panicItemf(it item, format string, v ...any) {
method panicf (line 106) | func (p *parser) panicf(format string, v ...any) {
method next (line 115) | func (p *parser) next() item {
method nextPos (line 134) | func (p *parser) nextPos() item {
method bug (line 140) | func (p *parser) bug(format string, v ...any) {
method expect (line 144) | func (p *parser) expect(typ itemType) item {
method assertEqual (line 150) | func (p *parser) assertEqual(expected, got itemType) {
method topLevel (line 156) | func (p *parser) topLevel(item item) {
method keyString (line 220) | func (p *parser) keyString(it item) string {
method value (line 241) | func (p *parser) value(it item, parentIsArray bool) (any, tomlType) {
method valueInteger (line 278) | func (p *parser) valueInteger(it item) (any, tomlType) {
method valueFloat (line 302) | func (p *parser) valueFloat(it item) (any, tomlType) {
method valueDatetime (line 358) | func (p *parser) valueDatetime(it item) (any, tomlType) {
method valueArray (line 398) | func (p *parser) valueArray(it item) (any, tomlType) {
method valueInlineTable (line 426) | func (p *parser) valueInlineTable(it item, parentIsArray bool) (any, t...
method addContext (line 544) | func (p *parser) addContext(key Key, array bool) {
method setValue (line 600) | func (p *parser) setValue(key string, value any) {
method setType (line 662) | func (p *parser) setType(key string, typ tomlType, pos Position) {
method addImplicit (line 679) | func (p *parser) addImplicit(key Key) { p.implicits[key.String(...
method removeImplicit (line 680) | func (p *parser) removeImplicit(key Key) { delete(p.implicits, key...
method isImplicit (line 681) | func (p *parser) isImplicit(key Key) bool { _, ok := p.implicits[ke...
method isArray (line 682) | func (p *parser) isArray(key Key) bool { return p.keyInfo[key.St...
method addImplicitContext (line 683) | func (p *parser) addImplicitContext(key Key) { p.addImplicit(key); p.a...
method current (line 686) | func (p *parser) current() string {
method stripEscapedNewlines (line 712) | func (p *parser) stripEscapedNewlines(s string) string {
method replaceEscapes (line 758) | func (p *parser) replaceEscapes(it item, str string) string {
method asciiEscapeToUnicode (line 826) | func (p *parser) asciiEscapeToUnicode(it item, s string) rune {
type keyInfo (line 27) | type keyInfo struct
function parse (line 32) | func parse(data string) (p *parser, err error) {
function missingLeadingZero (line 386) | func missingLeadingZero(d, l string) bool {
function numHasLeadingZero (line 495) | func numHasLeadingZero(s string) bool {
function numUnderscoresOK (line 507) | func numUnderscoresOK(s string) bool {
function numPeriodsOK (line 528) | func numPeriodsOK(s string) bool {
function stripFirstNewline (line 696) | func stripFirstNewline(s string) string {
FILE: vendor/github.com/BurntSushi/toml/type_fields.go
type field (line 16) | type field struct
type byName (line 26) | type byName
method Len (line 28) | func (x byName) Len() int { return len(x) }
method Swap (line 29) | func (x byName) Swap(i, j int) { x[i], x[j] = x[j], x[i] }
method Less (line 30) | func (x byName) Less(i, j int) bool {
type byIndex (line 44) | type byIndex
method Len (line 46) | func (x byIndex) Len() int { return len(x) }
method Swap (line 47) | func (x byIndex) Swap(i, j int) { x[i], x[j] = x[j], x[i] }
method Less (line 48) | func (x byIndex) Less(i, j int) bool {
function typeFields (line 63) | func typeFields(t reflect.Type) []field {
function dominantField (line 178) | func dominantField(fields []field) (field, bool) {
function cachedTypeFields (line 216) | func cachedTypeFields(t reflect.Type) []field {
FILE: vendor/github.com/BurntSushi/toml/type_toml.go
type tomlType (line 7) | type tomlType interface
function typeEqual (line 12) | func typeEqual(t1, t2 tomlType) bool {
function typeIsTable (line 19) | func typeIsTable(t tomlType) bool {
type tomlBaseType (line 23) | type tomlBaseType
method typeString (line 25) | func (btype tomlBaseType) typeString() string { return string(btype) }
method String (line 26) | func (btype tomlBaseType) String() string { return btype.typeStrin...
method typeOfPrimitive (line 44) | func (p *parser) typeOfPrimitive(lexItem item) tomlType {
FILE: vendor/github.com/Masterminds/semver/v3/collection.go
type Collection (line 6) | type Collection
method Len (line 10) | func (c Collection) Len() int {
method Less (line 16) | func (c Collection) Less(i, j int) bool {
method Swap (line 22) | func (c Collection) Swap(i, j int) {
FILE: vendor/github.com/Masterminds/semver/v3/constraints.go
type Constraints (line 13) | type Constraints struct
method Check (line 72) | func (cs Constraints) Check(v *Version) bool {
method Validate (line 95) | func (cs Constraints) Validate(v *Version) (bool, []error) {
method String (line 132) | func (cs Constraints) String() string {
method UnmarshalText (line 154) | func (cs *Constraints) UnmarshalText(text []byte) error {
method MarshalText (line 166) | func (cs Constraints) MarshalText() ([]byte, error) {
function NewConstraint (line 26) | func NewConstraint(c string) (*Constraints, error) {
constant cvRegex (line 180) | cvRegex string = `v?([0-9|x|X|\*]+)(\.[0-9|x|X|\*]+)?(\.[0-9|x|X|\*]+)?` +
function init (line 184) | func init() {
type constraint (line 228) | type constraint struct
method check (line 246) | func (c *constraint) check(v *Version, includePre bool) (bool, error) {
method string (line 251) | func (c *constraint) string() string {
type cfunc (line 255) | type cfunc
function parseConstraint (line 257) | func parseConstraint(c string) (*constraint, error) {
function constraintNotEqual (line 324) | func constraintNotEqual(v *Version, c *constraint, includePre bool) (boo...
function constraintGreaterThan (line 362) | func constraintGreaterThan(v *Version, c *constraint, includePre bool) (...
function constraintLessThan (line 407) | func constraintLessThan(v *Version, c *constraint, includePre bool) (boo...
function constraintGreaterThanEqual (line 421) | func constraintGreaterThanEqual(v *Version, c *constraint, includePre bo...
function constraintLessThanEqual (line 436) | func constraintLessThanEqual(v *Version, c *constraint, includePre bool)...
function constraintTilde (line 468) | func constraintTilde(v *Version, c *constraint, includePre bool) (bool, ...
function constraintTildeOrEqual (line 499) | func constraintTildeOrEqual(v *Version, c *constraint, includePre bool) ...
function constraintCaret (line 527) | func constraintCaret(v *Version, c *constraint, includePre bool) (bool, ...
function isX (line 580) | func isX(x string) bool {
function rewriteRange (line 589) | func rewriteRange(i string) string {
FILE: vendor/github.com/Masterminds/semver/v3/version.go
constant semVerRegex (line 56) | semVerRegex string = `v?(0|[1-9]\d*)(?:\.(0|[1-9]\d*))?(?:\.(0|[1-9]\d*)...
constant looseSemVerRegex (line 62) | looseSemVerRegex string = `v?([0-9]+)(\.[0-9]+)?(\.[0-9]+)?` +
type Version (line 67) | type Version struct
method String (line 321) | func (v Version) String() string {
method Original (line 336) | func (v *Version) Original() string {
method Major (line 341) | func (v Version) Major() uint64 {
method Minor (line 346) | func (v Version) Minor() uint64 {
method Patch (line 351) | func (v Version) Patch() uint64 {
method Prerelease (line 356) | func (v Version) Prerelease() string {
method Metadata (line 361) | func (v Version) Metadata() string {
method originalVPrefix (line 366) | func (v Version) originalVPrefix() string {
method IncPatch (line 379) | func (v Version) IncPatch() Version {
method IncMinor (line 402) | func (v Version) IncMinor() Version {
method IncMajor (line 418) | func (v Version) IncMajor() Version {
method SetPrerelease (line 431) | func (v Version) SetPrerelease(prerelease string) (Version, error) {
method SetMetadata (line 445) | func (v Version) SetMetadata(metadata string) (Version, error) {
method LessThan (line 458) | func (v *Version) LessThan(o *Version) bool {
method LessThanEqual (line 463) | func (v *Version) LessThanEqual(o *Version) bool {
method GreaterThan (line 468) | func (v *Version) GreaterThan(o *Version) bool {
method GreaterThanEqual (line 473) | func (v *Version) GreaterThanEqual(o *Version) bool {
method Equal (line 480) | func (v *Version) Equal(o *Version) bool {
method Compare (line 497) | func (v *Version) Compare(o *Version) int {
method UnmarshalJSON (line 528) | func (v *Version) UnmarshalJSON(b []byte) error {
method MarshalJSON (line 547) | func (v Version) MarshalJSON() ([]byte, error) {
method UnmarshalText (line 552) | func (v *Version) UnmarshalText(text []byte) error {
method MarshalText (line 564) | func (v Version) MarshalText() ([]byte, error) {
method Scan (line 569) | func (v *Version) Scan(value interface{}) error {
method Value (line 586) | func (v Version) Value() (driver.Value, error) {
function init (line 74) | func init() {
constant num (line 80) | num string = "0123456789"
constant allowed (line 81) | allowed string = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-"...
function StrictNewVersion (line 89) | func StrictNewVersion(v string) (*Version, error) {
function NewVersion (line 163) | func NewVersion(v string) (*Version, error) {
function coerceNewVersion (line 236) | func coerceNewVersion(v string) (*Version, error) {
function New (line 292) | func New(major, minor, patch uint64, pre, metadata string) *Version {
function MustParse (line 308) | func MustParse(v string) *Version {
function compareSegment (line 590) | func compareSegment(v, o uint64) int {
function comparePrerelease (line 601) | func comparePrerelease(v, o string) int {
function comparePrePart (line 643) | func comparePrePart(s, o string) int {
function containsOnly (line 696) | func containsOnly(s string, comp string) bool {
function validatePrerelease (line 706) | func validatePrerelease(p string) error {
function validateMetadata (line 727) | func validateMetadata(m string) error {
function validateVersion (line 740) | func validateVersion(m []string) error {
FILE: vendor/github.com/Microsoft/go-winio/backup.go
constant BackupData (line 23) | BackupData = uint32(iota + 1)
constant BackupEaData (line 24) | BackupEaData
constant BackupSecurity (line 25) | BackupSecurity
constant BackupAlternateData (line 26) | BackupAlternateData
constant BackupLink (line 27) | BackupLink
constant BackupPropertyData (line 28) | BackupPropertyData
constant BackupObjectId (line 29) | BackupObjectId
constant BackupReparseData (line 30) | BackupReparseData
constant BackupSparseBlock (line 31) | BackupSparseBlock
constant BackupTxfsData (line 32) | BackupTxfsData
constant StreamSparseAttributes (line 36) | StreamSparseAttributes = uint32(8)
constant WRITE_DAC (line 41) | WRITE_DAC = windows.WRITE_DAC
constant WRITE_OWNER (line 42) | WRITE_OWNER = windows.WRITE_OWNER
constant ACCESS_SYSTEM_SECURITY (line 43) | ACCESS_SYSTEM_SECURITY = windows.ACCESS_SYSTEM_SECURITY
type BackupHeader (line 47) | type BackupHeader struct
type win32StreamID (line 56) | type win32StreamID struct
type BackupStreamReader (line 65) | type BackupStreamReader struct
method Next (line 77) | func (r *BackupStreamReader) Next() (*BackupHeader, error) {
method Read (line 120) | func (r *BackupStreamReader) Read(b []byte) (int, error) {
function NewBackupStreamReader (line 71) | func NewBackupStreamReader(r io.Reader) *BackupStreamReader {
type BackupStreamWriter (line 138) | type BackupStreamWriter struct
method WriteHeader (line 149) | func (w *BackupStreamWriter) WriteHeader(hdr *BackupHeader) error {
method Write (line 182) | func (w *BackupStreamWriter) Write(b []byte) (int, error) {
function NewBackupStreamWriter (line 144) | func NewBackupStreamWriter(w io.Writer) *BackupStreamWriter {
type BackupFileReader (line 192) | type BackupFileReader struct
method Read (line 206) | func (r *BackupFileReader) Read(b []byte) (int, error) {
method Close (line 221) | func (r *BackupFileReader) Close() error {
function NewBackupFileReader (line 200) | func NewBackupFileReader(f *os.File, includeSecurity bool) *BackupFileRe...
type BackupFileWriter (line 231) | type BackupFileWriter struct
method Write (line 245) | func (w *BackupFileWriter) Write(b []byte) (int, error) {
method Close (line 260) | func (w *BackupFileWriter) Close() error {
function NewBackupFileWriter (line 239) | func NewBackupFileWriter(f *os.File, includeSecurity bool) *BackupFileWr...
function OpenForBackup (line 273) | func OpenForBackup(path string, access uint32, share uint32, createmode ...
FILE: vendor/github.com/Microsoft/go-winio/ea.go
type fileFullEaInformation (line 9) | type fileFullEaInformation struct
type ExtendedAttribute (line 25) | type ExtendedAttribute struct
function parseEa (line 31) | func parseEa(b []byte) (ea ExtendedAttribute, nb []byte, err error) {
function DecodeExtendedAttributes (line 60) | func DecodeExtendedAttributes(b []byte) (eas []ExtendedAttribute, err er...
function writeEa (line 73) | func writeEa(buf *bytes.Buffer, ea *ExtendedAttribute, last bool) error {
function EncodeExtendedAttributes (line 123) | func EncodeExtendedAttributes(eas []ExtendedAttribute) ([]byte, error) {
FILE: vendor/github.com/Microsoft/go-winio/file.go
type timeoutError (line 29) | type timeoutError struct
method Error (line 31) | func (*timeoutError) Error() string { return "i/o timeout" }
method Timeout (line 32) | func (*timeoutError) Timeout() bool { return true }
method Temporary (line 33) | func (*timeoutError) Temporary() bool { return true }
type timeoutChan (line 35) | type timeoutChan
type ioResult (line 41) | type ioResult struct
type ioOperation (line 47) | type ioOperation struct
function initIO (line 52) | func initIO() {
type win32File (line 63) | type win32File struct
method closeHandle (line 114) | func (f *win32File) closeHandle() {
method Close (line 131) | func (f *win32File) Close() error {
method IsClosed (line 137) | func (f *win32File) IsClosed() bool {
method prepareIO (line 143) | func (f *win32File) prepareIO() (*ioOperation, error) {
method asyncIO (line 174) | func (f *win32File) asyncIO(c *ioOperation, d *deadlineHandler, bytes ...
method Read (line 221) | func (f *win32File) Read(b []byte) (int, error) {
method Write (line 247) | func (f *win32File) Write(b []byte) (int, error) {
method SetReadDeadline (line 265) | func (f *win32File) SetReadDeadline(deadline time.Time) error {
method SetWriteDeadline (line 269) | func (f *win32File) SetWriteDeadline(deadline time.Time) error {
method Flush (line 273) | func (f *win32File) Flush() error {
method Fd (line 277) | func (f *win32File) Fd() uintptr {
type deadlineHandler (line 73) | type deadlineHandler struct
method set (line 281) | func (d *deadlineHandler) set(deadline time.Time) error {
function makeWin32File (line 82) | func makeWin32File(h windows.Handle) (*win32File, error) {
function MakeOpenFile (line 99) | func MakeOpenFile(h syscall.Handle) (io.ReadWriteCloser, error) {
function NewOpenFile (line 103) | func NewOpenFile(h windows.Handle) (io.ReadWriteCloser, error) {
function ioCompletionProcessor (line 157) | func ioCompletionProcessor(h windows.Handle) {
FILE: vendor/github.com/Microsoft/go-winio/fileinfo.go
type FileBasicInfo (line 15) | type FileBasicInfo struct
type alignedFileBasicInfo (line 24) | type alignedFileBasicInfo struct
function GetFileBasicInfo (line 31) | func GetFileBasicInfo(f *os.File) (*FileBasicInfo, error) {
function SetFileBasicInfo (line 48) | func SetFileBasicInfo(f *os.File, bi *FileBasicInfo) error {
type FileStandardInfo (line 67) | type FileStandardInfo struct
function GetFileStandardInfo (line 74) | func GetFileStandardInfo(f *os.File) (*FileStandardInfo, error) {
type FileIDInfo (line 88) | type FileIDInfo struct
function GetFileID (line 94) | func GetFileID(f *os.File) (*FileIDInfo, error) {
FILE: vendor/github.com/Microsoft/go-winio/hvsock.go
constant afHVSock (line 22) | afHVSock = 34
function HvsockGUIDWildcard (line 28) | func HvsockGUIDWildcard() guid.GUID { // 00000000-0000-0000-0000-0000000...
function HvsockGUIDBroadcast (line 33) | func HvsockGUIDBroadcast() guid.GUID { // ffffffff-ffff-ffff-ffff-ffffff...
function HvsockGUIDLoopback (line 43) | func HvsockGUIDLoopback() guid.GUID { // e0e16197-dd56-4a10-9195-5ee7a15...
function HvsockGUIDSiloHost (line 55) | func HvsockGUIDSiloHost() guid.GUID { // 36bd0c5c-7276-4223-88ba-7d03b65...
function HvsockGUIDChildren (line 65) | func HvsockGUIDChildren() guid.GUID { // 90db8b89-0d35-4f79-8ce9-49ea0ac...
function HvsockGUIDParent (line 80) | func HvsockGUIDParent() guid.GUID { // a42e7cda-d03f-480c-9cc2-a4de20abb878
function hvsockVsockServiceTemplate (line 90) | func hvsockVsockServiceTemplate() guid.GUID { // 00000000-facb-11e6-bd58...
type HvsockAddr (line 99) | type HvsockAddr struct
method Network (line 114) | func (*HvsockAddr) Network() string {
method String (line 118) | func (addr *HvsockAddr) String() string {
method raw (line 129) | func (addr *HvsockAddr) raw() rawHvsockAddr {
method fromRaw (line 137) | func (addr *HvsockAddr) fromRaw(raw *rawHvsockAddr) {
type rawHvsockAddr (line 104) | type rawHvsockAddr struct
method Sockaddr (line 146) | func (r *rawHvsockAddr) Sockaddr() (unsafe.Pointer, int32, error) {
method FromBytes (line 151) | func (r *rawHvsockAddr) FromBytes(b []byte) error {
function VsockServiceID (line 123) | func VsockServiceID(port uint32) guid.GUID {
type HvsockListener (line 167) | type HvsockListener struct
method opErr (line 223) | func (l *HvsockListener) opErr(op string, err error) error {
method Addr (line 228) | func (l *HvsockListener) Addr() net.Addr {
method Accept (line 233) | func (l *HvsockListener) Accept() (_ net.Conn, err error) {
method Close (line 284) | func (l *HvsockListener) Close() error {
type HvsockConn (line 175) | type HvsockConn struct
method opErr (line 443) | func (conn *HvsockConn) opErr(op string, err error) error {
method Read (line 451) | func (conn *HvsockConn) Read(b []byte) (int, error) {
method Write (line 473) | func (conn *HvsockConn) Write(b []byte) (int, error) {
method write (line 486) | func (conn *HvsockConn) write(b []byte) (int, error) {
method Close (line 507) | func (conn *HvsockConn) Close() error {
method IsClosed (line 511) | func (conn *HvsockConn) IsClosed() bool {
method shutdown (line 516) | func (conn *HvsockConn) shutdown(how int) error {
method CloseRead (line 534) | func (conn *HvsockConn) CloseRead() error {
method CloseWrite (line 544) | func (conn *HvsockConn) CloseWrite() error {
method LocalAddr (line 553) | func (conn *HvsockConn) LocalAddr() net.Addr {
method RemoteAddr (line 558) | func (conn *HvsockConn) RemoteAddr() net.Addr {
method SetDeadline (line 563) | func (conn *HvsockConn) SetDeadline(t time.Time) error {
method SetReadDeadline (line 575) | func (conn *HvsockConn) SetReadDeadline(t time.Time) error {
method SetWriteDeadline (line 580) | func (conn *HvsockConn) SetWriteDeadline(t time.Time) error {
function newHVSocket (line 182) | func newHVSocket() (*win32File, error) {
function ListenHvsock (line 197) | func ListenHvsock(addr *HvsockAddr) (_ *HvsockListener, err error) {
type HvsockDialer (line 289) | type HvsockDialer struct
method Dial (line 315) | func (d *HvsockDialer) Dial(ctx context.Context, addr *HvsockAddr) (co...
method redialWait (line 406) | func (d *HvsockDialer) redialWait(ctx context.Context) (err error) {
function Dial (line 306) | func Dial(ctx context.Context, addr *HvsockAddr) (conn *HvsockConn, err ...
function canRedial (line 432) | func canRedial(err error) bool {
FILE: vendor/github.com/Microsoft/go-winio/internal/fs/fs.go
constant NullHandle (line 16) | NullHandle windows.Handle = 0
constant FILE_ANY_ACCESS (line 50) | FILE_ANY_ACCESS AccessMask = 0
constant GENERIC_READ (line 52) | GENERIC_READ AccessMask = 0x8000_0000
constant GENERIC_WRITE (line 53) | GENERIC_WRITE AccessMask = 0x4000_0000
constant GENERIC_EXECUTE (line 54) | GENERIC_EXECUTE AccessMask = 0x2000_0000
constant GENERIC_ALL (line 55) | GENERIC_ALL AccessMask = 0x1000_0000
constant ACCESS_SYSTEM_SECURITY (line 56) | ACCESS_SYSTEM_SECURITY AccessMask = 0x0100_0000
constant FILE_READ_DATA (line 61) | FILE_READ_DATA AccessMask = (0x0001)
constant FILE_LIST_DIRECTORY (line 62) | FILE_LIST_DIRECTORY AccessMask = (0x0001)
constant FILE_WRITE_DATA (line 64) | FILE_WRITE_DATA AccessMask = (0x0002)
constant FILE_ADD_FILE (line 65) | FILE_ADD_FILE AccessMask = (0x0002)
constant FILE_APPEND_DATA (line 67) | FILE_APPEND_DATA AccessMask = (0x0004)
constant FILE_ADD_SUBDIRECTORY (line 68) | FILE_ADD_SUBDIRECTORY AccessMask = (0x0004)
constant FILE_CREATE_PIPE_INSTANCE (line 69) | FILE_CREATE_PIPE_INSTANCE AccessMask = (0x0004)
constant FILE_READ_EA (line 71) | FILE_READ_EA AccessMask = (0x0008)
constant FILE_READ_PROPERTIES (line 72) | FILE_READ_PROPERTIES AccessMask = FILE_READ_EA
constant FILE_WRITE_EA (line 74) | FILE_WRITE_EA AccessMask = (0x0010)
constant FILE_WRITE_PROPERTIES (line 75) | FILE_WRITE_PROPERTIES AccessMask = FILE_WRITE_EA
constant FILE_EXECUTE (line 77) | FILE_EXECUTE AccessMask = (0x0020)
constant FILE_TRAVERSE (line 78) | FILE_TRAVERSE AccessMask = (0x0020)
constant FILE_DELETE_CHILD (line 80) | FILE_DELETE_CHILD AccessMask = (0x0040)
constant FILE_READ_ATTRIBUTES (line 82) | FILE_READ_ATTRIBUTES AccessMask = (0x0080)
constant FILE_WRITE_ATTRIBUTES (line 84) | FILE_WRITE_ATTRIBUTES AccessMask = (0x0100)
constant FILE_ALL_ACCESS (line 86) | FILE_ALL_ACCESS AccessMask = (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZ...
constant FILE_GENERIC_READ (line 87) | FILE_GENERIC_READ AccessMask = (STANDARD_RIGHTS_READ | FILE_READ_DATA...
constant FILE_GENERIC_WRITE (line 88) | FILE_GENERIC_WRITE AccessMask = (STANDARD_RIGHTS_WRITE | FILE_WRITE_DA...
constant FILE_GENERIC_EXECUTE (line 89) | FILE_GENERIC_EXECUTE AccessMask = (STANDARD_RIGHTS_EXECUTE | FILE_READ_A...
constant SPECIFIC_RIGHTS_ALL (line 91) | SPECIFIC_RIGHTS_ALL AccessMask = 0x0000FFFF
constant DELETE (line 96) | DELETE AccessMask = 0x0001_0000
constant READ_CONTROL (line 97) | READ_CONTROL AccessMask = 0x0002_0000
constant WRITE_DAC (line 98) | WRITE_DAC AccessMask = 0x0004_0000
constant WRITE_OWNER (line 99) | WRITE_OWNER AccessMask = 0x0008_0000
constant SYNCHRONIZE (line 100) | SYNCHRONIZE AccessMask = 0x0010_0000
constant STANDARD_RIGHTS_REQUIRED (line 102) | STANDARD_RIGHTS_REQUIRED AccessMask = 0x000F_0000
constant STANDARD_RIGHTS_READ (line 104) | STANDARD_RIGHTS_READ AccessMask = READ_CONTROL
constant STANDARD_RIGHTS_WRITE (line 105) | STANDARD_RIGHTS_WRITE AccessMask = READ_CONTROL
constant STANDARD_RIGHTS_EXECUTE (line 106) | STANDARD_RIGHTS_EXECUTE AccessMask = READ_CONTROL
constant STANDARD_RIGHTS_ALL (line 108) | STANDARD_RIGHTS_ALL AccessMask = 0x001F_0000
type FileShareMode (line 111) | type FileShareMode
constant FILE_SHARE_NONE (line 115) | FILE_SHARE_NONE FileShareMode = 0x00
constant FILE_SHARE_READ (line 116) | FILE_SHARE_READ FileShareMode = 0x01
constant FILE_SHARE_WRITE (line 117) | FILE_SHARE_WRITE FileShareMode = 0x02
constant FILE_SHARE_DELETE (line 118) | FILE_SHARE_DELETE FileShareMode = 0x04
constant FILE_SHARE_VALID_FLAGS (line 119) | FILE_SHARE_VALID_FLAGS FileShareMode = 0x07
type FileCreationDisposition (line 122) | type FileCreationDisposition
constant CREATE_NEW (line 128) | CREATE_NEW FileCreationDisposition = 0x01
constant CREATE_ALWAYS (line 129) | CREATE_ALWAYS FileCreationDisposition = 0x02
constant OPEN_EXISTING (line 130) | OPEN_EXISTING FileCreationDisposition = 0x03
constant OPEN_ALWAYS (line 131) | OPEN_ALWAYS FileCreationDisposition = 0x04
constant TRUNCATE_EXISTING (line 132) | TRUNCATE_EXISTING FileCreationDisposition = 0x05
type NTFileCreationDisposition (line 136) | type NTFileCreationDisposition
constant FILE_SUPERSEDE (line 142) | FILE_SUPERSEDE NTFileCreationDisposition = 0x00
constant FILE_OPEN (line 143) | FILE_OPEN NTFileCreationDisposition = 0x01
constant FILE_CREATE (line 144) | FILE_CREATE NTFileCreationDisposition = 0x02
constant FILE_OPEN_IF (line 145) | FILE_OPEN_IF NTFileCreationDisposition = 0x03
constant FILE_OVERWRITE (line 146) | FILE_OVERWRITE NTFileCreationDisposition = 0x04
constant FILE_OVERWRITE_IF (line 147) | FILE_OVERWRITE_IF NTFileCreationDisposition = 0x05
constant FILE_MAXIMUM_DISPOSITION (line 148) | FILE_MAXIMUM_DISPOSITION NTFileCreationDisposition = 0x05
type FileFlagOrAttribute (line 155) | type FileFlagOrAttribute
constant FILE_FLAG_WRITE_THROUGH (line 161) | FILE_FLAG_WRITE_THROUGH FileFlagOrAttribute = 0x8000_0000
constant FILE_FLAG_OVERLAPPED (line 162) | FILE_FLAG_OVERLAPPED FileFlagOrAttribute = 0x4000_0000
constant FILE_FLAG_NO_BUFFERING (line 163) | FILE_FLAG_NO_BUFFERING FileFlagOrAttribute = 0x2000_0000
constant FILE_FLAG_RANDOM_ACCESS (line 164) | FILE_FLAG_RANDOM_ACCESS FileFlagOrAttribute = 0x1000_0000
constant FILE_FLAG_SEQUENTIAL_SCAN (line 165) | FILE_FLAG_SEQUENTIAL_SCAN FileFlagOrAttribute = 0x0800_0000
constant FILE_FLAG_DELETE_ON_CLOSE (line 166) | FILE_FLAG_DELETE_ON_CLOSE FileFlagOrAttribute = 0x0400_0000
constant FILE_FLAG_BACKUP_SEMANTICS (line 167) | FILE_FLAG_BACKUP_SEMANTICS FileFlagOrAttribute = 0x0200_0000
constant FILE_FLAG_POSIX_SEMANTICS (line 168) | FILE_FLAG_POSIX_SEMANTICS FileFlagOrAttribute = 0x0100_0000
constant FILE_FLAG_OPEN_REPARSE_POINT (line 169) | FILE_FLAG_OPEN_REPARSE_POINT FileFlagOrAttribute = 0x0020_0000
constant FILE_FLAG_OPEN_NO_RECALL (line 170) | FILE_FLAG_OPEN_NO_RECALL FileFlagOrAttribute = 0x0010_0000
constant FILE_FLAG_FIRST_PIPE_INSTANCE (line 171) | FILE_FLAG_FIRST_PIPE_INSTANCE FileFlagOrAttribute = 0x0008_0000
type NTCreateOptions (line 179) | type NTCreateOptions
constant FILE_DIRECTORY_FILE (line 185) | FILE_DIRECTORY_FILE NTCreateOptions = 0x0000_0001
constant FILE_WRITE_THROUGH (line 186) | FILE_WRITE_THROUGH NTCreateOptions = 0x0000_0002
constant FILE_SEQUENTIAL_ONLY (line 187) | FILE_SEQUENTIAL_ONLY NTCreateOptions = 0x0000_0004
constant FILE_NO_INTERMEDIATE_BUFFERING (line 188) | FILE_NO_INTERMEDIATE_BUFFERING NTCreateOptions = 0x0000_0008
constant FILE_SYNCHRONOUS_IO_ALERT (line 190) | FILE_SYNCHRONOUS_IO_ALERT NTCreateOptions = 0x0000_0010
constant FILE_SYNCHRONOUS_IO_NONALERT (line 191) | FILE_SYNCHRONOUS_IO_NONALERT NTCreateOptions = 0x0000_0020
constant FILE_NON_DIRECTORY_FILE (line 192) | FILE_NON_DIRECTORY_FILE NTCreateOptions = 0x0000_0040
constant FILE_CREATE_TREE_CONNECTION (line 193) | FILE_CREATE_TREE_CONNECTION NTCreateOptions = 0x0000_0080
constant FILE_COMPLETE_IF_OPLOCKED (line 195) | FILE_COMPLETE_IF_OPLOCKED NTCreateOptions = 0x0000_0100
constant FILE_NO_EA_KNOWLEDGE (line 196) | FILE_NO_EA_KNOWLEDGE NTCreateOptions = 0x0000_0200
constant FILE_DISABLE_TUNNELING (line 197) | FILE_DISABLE_TUNNELING NTCreateOptions = 0x0000_0400
constant FILE_RANDOM_ACCESS (line 198) | FILE_RANDOM_ACCESS NTCreateOptions = 0x0000_0800
constant FILE_DELETE_ON_CLOSE (line 200) | FILE_DELETE_ON_CLOSE NTCreateOptions = 0x0000_1000
constant FILE_OPEN_BY_FILE_ID (line 201) | FILE_OPEN_BY_FILE_ID NTCreateOptions = 0x0000_2000
constant FILE_OPEN_FOR_BACKUP_INTENT (line 202) | FILE_OPEN_FOR_BACKUP_INTENT NTCreateOptions = 0x0000_4000
constant FILE_NO_COMPRESSION (line 203) | FILE_NO_COMPRESSION NTCreateOptions = 0x0000_8000
constant SECURITY_ANONYMOUS (line 212) | SECURITY_ANONYMOUS FileSQSFlag = FileSQSFlag(SecurityAnonymous << 16)
constant SECURITY_IDENTIFICATION (line 213) | SECURITY_IDENTIFICATION FileSQSFlag = FileSQSFlag(SecurityIdentification...
constant SECURITY_IMPERSONATION (line 214) | SECURITY_IMPERSONATION FileSQSFlag = FileSQSFlag(SecurityImpersonation ...
constant SECURITY_DELEGATION (line 215) | SECURITY_DELEGATION FileSQSFlag = FileSQSFlag(SecurityDelegation << 16)
constant SECURITY_SQOS_PRESENT (line 217) | SECURITY_SQOS_PRESENT FileSQSFlag = 0x0010_0000
constant SECURITY_VALID_SQOS_FLAGS (line 218) | SECURITY_VALID_SQOS_FLAGS FileSQSFlag = 0x001F_0000
type GetFinalPathFlag (line 224) | type GetFinalPathFlag
constant GetFinalPathDefaultFlag (line 228) | GetFinalPathDefaultFlag GetFinalPathFlag = 0x0
constant FILE_NAME_NORMALIZED (line 230) | FILE_NAME_NORMALIZED GetFinalPathFlag = 0x0
constant FILE_NAME_OPENED (line 231) | FILE_NAME_OPENED GetFinalPathFlag = 0x8
constant VOLUME_NAME_DOS (line 233) | VOLUME_NAME_DOS GetFinalPathFlag = 0x0
constant VOLUME_NAME_GUID (line 234) | VOLUME_NAME_GUID GetFinalPathFlag = 0x1
constant VOLUME_NAME_NT (line 235) | VOLUME_NAME_NT GetFinalPathFlag = 0x2
constant VOLUME_NAME_NONE (line 236) | VOLUME_NAME_NONE GetFinalPathFlag = 0x4
function GetFinalPathNameByHandle (line 244) | func GetFinalPathNameByHandle(h windows.Handle, flags GetFinalPathFlag) ...
FILE: vendor/github.com/Microsoft/go-winio/internal/fs/security.go
type SecurityImpersonationLevel (line 4) | type SecurityImpersonationLevel
constant SecurityAnonymous (line 8) | SecurityAnonymous SecurityImpersonationLevel = 0
constant SecurityIdentification (line 9) | SecurityIdentification SecurityImpersonationLevel = 1
constant SecurityImpersonation (line 10) | SecurityImpersonation SecurityImpersonationLevel = 2
constant SecurityDelegation (line 11) | SecurityDelegation SecurityImpersonationLevel = 3
FILE: vendor/github.com/Microsoft/go-winio/internal/fs/zsyscall_windows.go
constant errnoERROR_IO_PENDING (line 19) | errnoERROR_IO_PENDING = 997
function errnoErr (line 29) | func errnoErr(e syscall.Errno) error {
function CreateFile (line 45) | func CreateFile(name string, access AccessMask, mode FileShareMode, sa *...
function _CreateFile (line 54) | func _CreateFile(name *uint16, access AccessMask, mode FileShareMode, sa...
FILE: vendor/github.com/Microsoft/go-winio/internal/socket/rawaddr.go
type RawSockaddr (line 13) | type RawSockaddr interface
FILE: vendor/github.com/Microsoft/go-winio/internal/socket/socket.go
constant socketError (line 23) | socketError = uintptr(^uint32(0))
function GetSockName (line 38) | func GetSockName(s windows.Handle, rsa RawSockaddr) error {
function GetPeerName (line 52) | func GetPeerName(s windows.Handle, rsa RawSockaddr) error {
function Bind (line 61) | func Bind(s windows.Handle, rsa RawSockaddr) (err error) {
type runtimeFunc (line 79) | type runtimeFunc struct
method Load (line 86) | func (f *runtimeFunc) Load() error {
function ConnectEx (line 122) | func ConnectEx(
function connectEx (line 150) | func connectEx(
FILE: vendor/github.com/Microsoft/go-winio/internal/socket/zsyscall_windows.go
constant errnoERROR_IO_PENDING (line 19) | errnoERROR_IO_PENDING = 997
function errnoErr (line 29) | func errnoErr(e syscall.Errno) error {
function bind (line 47) | func bind(s windows.Handle, name unsafe.Pointer, namelen int32) (err err...
function getpeername (line 55) | func getpeername(s windows.Handle, name unsafe.Pointer, namelen *int32) ...
function getsockname (line 63) | func getsockname(s windows.Handle, name unsafe.Pointer, namelen *int32) ...
FILE: vendor/github.com/Microsoft/go-winio/internal/stringbuffer/wstring.go
constant MinWStringCap (line 13) | MinWStringCap = 310
function newBuffer (line 25) | func newBuffer() []uint16 { return *(pathPool.Get().(*[]uint16)) }
function freeBuffer (line 29) | func freeBuffer(b []uint16) { pathPool.Put(&b) }
type WString (line 36) | type WString struct
method Free (line 54) | func (b *WString) Free() {
method ResizeTo (line 64) | func (b *WString) ResizeTo(c uint32) uint32 {
method Buffer (line 88) | func (b *WString) Buffer() []uint16 {
method Pointer (line 97) | func (b *WString) Pointer() *uint16 {
method String (line 107) | func (b *WString) String() string {
method Cap (line 124) | func (b *WString) Cap() uint32 {
method cap (line 131) | func (b *WString) cap() uint32 { return uint32(cap(b.b)) }
method empty (line 132) | func (b *WString) empty() bool { return b == nil || b.cap() == 0 }
function NewWString (line 48) | func NewWString() *WString {
FILE: vendor/github.com/Microsoft/go-winio/pipe.go
type PipeConn (line 32) | type PipeConn interface
type ioStatusBlock (line 46) | type ioStatusBlock struct
type objectAttributes (line 60) | type objectAttributes struct
type unicodeString (line 69) | type unicodeString struct
type securityDescriptor (line 86) | type securityDescriptor struct
type ntStatus (line 96) | type ntStatus
method Err (line 98) | func (status ntStatus) Err() error {
type win32Pipe (line 112) | type win32Pipe struct
method LocalAddr (line 127) | func (f *win32Pipe) LocalAddr() net.Addr {
method RemoteAddr (line 131) | func (f *win32Pipe) RemoteAddr() net.Addr {
method SetDeadline (line 135) | func (f *win32Pipe) SetDeadline(t time.Time) error {
method Disconnect (line 142) | func (f *win32Pipe) Disconnect() error {
type win32MessageBytePipe (line 119) | type win32MessageBytePipe struct
method CloseWrite (line 147) | func (f *win32MessageBytePipe) CloseWrite() error {
method Write (line 165) | func (f *win32MessageBytePipe) Write(b []byte) (int, error) {
method Read (line 177) | func (f *win32MessageBytePipe) Read(b []byte) (int, error) {
type pipeAddress (line 125) | type pipeAddress
method Network (line 198) | func (pipeAddress) Network() string {
method String (line 202) | func (s pipeAddress) String() string {
function tryDialPipe (line 207) | func tryDialPipe(ctx context.Context, path *string, access fs.AccessMask...
function DialPipe (line 237) | func DialPipe(path string, timeout *time.Duration) (net.Conn, error) {
function DialPipeContext (line 255) | func DialPipeContext(ctx context.Context, path string) (net.Conn, error) {
type PipeImpLevel (line 261) | type PipeImpLevel
constant PipeImpLevelAnonymous (line 264) | PipeImpLevelAnonymous = PipeImpLevel(fs.SECURITY_ANONYMOUS)
constant PipeImpLevelIdentification (line 265) | PipeImpLevelIdentification = PipeImpLevel(fs.SECURITY_IDENTIFICATION)
constant PipeImpLevelImpersonation (line 266) | PipeImpLevelImpersonation = PipeImpLevel(fs.SECURITY_IMPERSONATION)
constant PipeImpLevelDelegation (line 267) | PipeImpLevelDelegation = PipeImpLevel(fs.SECURITY_DELEGATION)
function DialPipeAccess (line 272) | func DialPipeAccess(ctx context.Context, path string, access uint32) (ne...
function DialPipeAccessImpLevel (line 279) | func DialPipeAccessImpLevel(ctx context.Context, path string, access uin...
type acceptResponse (line 309) | type acceptResponse struct
type win32PipeListener (line 314) | type win32PipeListener struct
method makeServerPipe (line 416) | func (l *win32PipeListener) makeServerPipe() (*win32File, error) {
method makeConnectedServerPipe (line 429) | func (l *win32PipeListener) makeConnectedServerPipe() (*win32File, err...
method listenerRoutine (line 459) | func (l *win32PipeListener) listenerRoutine() {
method Accept (line 555) | func (l *win32PipeListener) Accept() (net.Conn, error) {
method Close (line 575) | func (l *win32PipeListener) Close() error {
method Addr (line 584) | func (l *win32PipeListener) Addr() net.Addr {
function makeServerPipeHandle (line 323) | func makeServerPipeHandle(path string, sd []byte, c *PipeConfig, first b...
type PipeConfig (line 489) | type PipeConfig struct
function ListenPipe (line 510) | func ListenPipe(path string, c *PipeConfig) (net.Listener, error) {
function connectPipe (line 540) | func connectPipe(p *win32File) error {
FILE: vendor/github.com/Microsoft/go-winio/pkg/guid/guid.go
type Variant (line 21) | type Variant
constant VariantUnknown (line 27) | VariantUnknown Variant = iota
constant VariantNCS (line 28) | VariantNCS
constant VariantRFC4122 (line 29) | VariantRFC4122
constant VariantMicrosoft (line 30) | VariantMicrosoft
constant VariantFuture (line 31) | VariantFuture
type Version (line 37) | type Version
method String (line 39) | func (v Version) String() string {
function NewV4 (line 47) | func NewV4() (GUID, error) {
function NewV5 (line 67) | func NewV5(namespace GUID, name []byte) (GUID, error) {
function fromArray (line 83) | func fromArray(b [16]byte, order binary.ByteOrder) GUID {
method toArray (line 92) | func (g GUID) toArray(order binary.ByteOrder) [16]byte {
function FromArray (line 102) | func FromArray(b [16]byte) GUID {
method ToArray (line 108) | func (g GUID) ToArray() [16]byte {
function FromWindowsArray (line 113) | func FromWindowsArray(b [16]byte) GUID {
method ToWindowsArray (line 119) | func (g GUID) ToWindowsArray() [16]byte {
method String (line 123) | func (g GUID) String() string {
function FromString (line 136) | func FromString(s string) (GUID, error) {
method setVariant (line 175) | func (g *GUID) setVariant(v Variant) {
method Variant (line 195) | func (g GUID) Variant() Variant {
method setVersion (line 209) | func (g *GUID) setVersion(v Version) {
method Version (line 214) | func (g GUID) Version() Version {
method MarshalText (line 219) | func (g GUID) MarshalText() ([]byte, error) {
method UnmarshalText (line 225) | func (g *GUID) UnmarshalText(text []byte) error {
FILE: vendor/github.com/Microsoft/go-winio/pkg/guid/guid_nonwindows.go
type GUID (line 11) | type GUID struct
FILE: vendor/github.com/Microsoft/go-winio/pkg/guid/guid_windows.go
type GUID (line 13) | type GUID
FILE: vendor/github.com/Microsoft/go-winio/pkg/guid/variant_string.go
function _ (line 7) | func _() {
constant _Variant_name (line 18) | _Variant_name = "UnknownNCSRFC 4122MicrosoftFuture"
method String (line 22) | func (i Variant) String() string {
FILE: vendor/github.com/Microsoft/go-winio/privilege.go
constant SE_PRIVILEGE_ENABLED (line 28) | SE_PRIVILEGE_ENABLED = windows.SE_PRIVILEGE_ENABLED
constant ERROR_NOT_ALL_ASSIGNED (line 31) | ERROR_NOT_ALL_ASSIGNED windows.Errno = windows.ERROR_NOT_ALL_ASSIGNED
constant SeBackupPrivilege (line 33) | SeBackupPrivilege = "SeBackupPrivilege"
constant SeRestorePrivilege (line 34) | SeRestorePrivilege = "SeRestorePrivilege"
constant SeSecurityPrivilege (line 35) | SeSecurityPrivilege = "SeSecurityPrivilege"
type PrivilegeError (line 44) | type PrivilegeError struct
method Error (line 48) | func (e *PrivilegeError) Error() string {
function RunWithPrivilege (line 65) | func RunWithPrivilege(name string, fn func() error) error {
function RunWithPrivileges (line 70) | func RunWithPrivileges(names []string, fn func() error) error {
function mapPrivileges (line 89) | func mapPrivileges(names []string) ([]uint64, error) {
function EnableProcessPrivileges (line 108) | func EnableProcessPrivileges(names []string) error {
function DisableProcessPrivileges (line 113) | func DisableProcessPrivileges(names []string) error {
function enableDisableProcessPrivilege (line 117) | func enableDisableProcessPrivilege(names []string, action uint32) error {
function adjustPrivileges (line 134) | func adjustPrivileges(token windows.Token, privileges []uint64, action u...
function getPrivilegeName (line 153) | func getPrivilegeName(luid uint64) string {
function newThreadToken (line 172) | func newThreadToken() (windows.Token, error) {
function releaseThreadToken (line 190) | func releaseThreadToken(h windows.Token) {
FILE: vendor/github.com/Microsoft/go-winio/reparse.go
constant reparseTagMountPoint (line 16) | reparseTagMountPoint = 0xA0000003
constant reparseTagSymlink (line 17) | reparseTagSymlink = 0xA000000C
type reparseDataBuffer (line 20) | type reparseDataBuffer struct
type ReparsePoint (line 31) | type ReparsePoint struct
type UnsupportedReparsePointError (line 38) | type UnsupportedReparsePointError struct
method Error (line 42) | func (e *UnsupportedReparsePointError) Error() string {
function DecodeReparsePoint (line 48) | func DecodeReparsePoint(b []byte) (*ReparsePoint, error) {
function DecodeReparsePointData (line 53) | func DecodeReparsePointData(tag uint32, b []byte) (*ReparsePoint, error) {
function isDriveLetter (line 75) | func isDriveLetter(c byte) bool {
function EncodeReparsePoint (line 81) | func EncodeReparsePoint(rp *ReparsePoint) []byte {
FILE: vendor/github.com/Microsoft/go-winio/sd.go
type AccountLookupError (line 19) | type AccountLookupError struct
method Error (line 24) | func (e *AccountLookupError) Error() string {
method Unwrap (line 40) | func (e *AccountLookupError) Unwrap() error { return e.Err }
type SddlConversionError (line 42) | type SddlConversionError struct
method Error (line 47) | func (e *SddlConversionError) Error() string {
method Unwrap (line 51) | func (e *SddlConversionError) Unwrap() error { return e.Err }
function LookupSidByName (line 56) | func LookupSidByName(name string) (sid string, err error) {
function LookupNameBySid (line 85) | func LookupNameBySid(sid string) (name string, err error) {
function SddlToSecurityDescriptor (line 118) | func SddlToSecurityDescriptor(sddl string) ([]byte, error) {
function SecurityDescriptorToSddl (line 127) | func SecurityDescriptorToSddl(sd []byte) (string, error) {
FILE: vendor/github.com/Microsoft/go-winio/zsyscall_windows.go
constant errnoERROR_IO_PENDING (line 19) | errnoERROR_IO_PENDING = 997
function errnoErr (line 29) | func errnoErr(e syscall.Errno) error {
function adjustTokenPrivileges (line 75) | func adjustTokenPrivileges(token windows.Token, releaseAll bool, input *...
function convertSidToStringSid (line 88) | func convertSidToStringSid(sid *byte, str **uint16) (err error) {
function convertStringSidToSid (line 96) | func convertStringSidToSid(str *uint16, sid **byte) (err error) {
function impersonateSelf (line 104) | func impersonateSelf(level uint32) (err error) {
function lookupAccountName (line 112) | func lookupAccountName(systemName *uint16, accountName string, sid *byte...
function _lookupAccountName (line 121) | func _lookupAccountName(systemName *uint16, accountName *uint16, sid *by...
function lookupAccountSid (line 129) | func lookupAccountSid(systemName *uint16, sid *byte, name *uint16, nameS...
function lookupPrivilegeDisplayName (line 137) | func lookupPrivilegeDisplayName(systemName string, name *uint16, buffer ...
function _lookupPrivilegeDisplayName (line 146) | func _lookupPrivilegeDisplayName(systemName *uint16, name *uint16, buffe...
function lookupPrivilegeName (line 154) | func lookupPrivilegeName(systemName string, luid *uint64, buffer *uint16...
function _lookupPrivilegeName (line 163) | func _lookupPrivilegeName(systemName *uint16, luid *uint64, buffer *uint...
function lookupPrivilegeValue (line 171) | func lookupPrivilegeValue(systemName string, name string, luid *uint64) ...
function _lookupPrivilegeValue (line 185) | func _lookupPrivilegeValue(systemName *uint16, name *uint16, luid *uint6...
function openThreadToken (line 193) | func openThreadToken(thread windows.Handle, accessMask uint32, openAsSel...
function revertToSelf (line 205) | func revertToSelf() (err error) {
function backupRead (line 213) | func backupRead(h windows.Handle, b []byte, bytesRead *uint32, abort boo...
function backupWrite (line 233) | func backupWrite(h windows.Handle, b []byte, bytesWritten *uint32, abort...
function cancelIoEx (line 253) | func cancelIoEx(file windows.Handle, o *windows.Overlapped) (err error) {
function connectNamedPipe (line 261) | func connectNamedPipe(pipe windows.Handle, o *windows.Overlapped) (err e...
function createIoCompletionPort (line 269) | func createIoCompletionPort(file windows.Handle, port windows.Handle, ke...
function createNamedPipe (line 278) | func createNamedPipe(name string, flags uint32, pipeMode uint32, maxInst...
function _createNamedPipe (line 287) | func _createNamedPipe(name *uint16, flags uint32, pipeMode uint32, maxIn...
function disconnectNamedPipe (line 296) | func disconnectNamedPipe(pipe windows.Handle) (err error) {
function getCurrentThread (line 304) | func getCurrentThread() (h windows.Handle) {
function getNamedPipeHandleState (line 310) | func getNamedPipeHandleState(pipe windows.Handle, state *uint32, curInst...
function getNamedPipeInfo (line 318) | func getNamedPipeInfo(pipe windows.Handle, flags *uint32, outSize *uint3...
function getQueuedCompletionStatus (line 326) | func getQueuedCompletionStatus(port windows.Handle, bytes *uint32, key *...
function setFileCompletionNotificationModes (line 334) | func setFileCompletionNotificationModes(h windows.Handle, flags uint8) (...
function ntCreateNamedPipeFile (line 342) | func ntCreateNamedPipeFile(pipe *windows.Handle, access ntAccessMask, oa...
function rtlDefaultNpAcl (line 348) | func rtlDefaultNpAcl(dacl *uintptr) (status ntStatus) {
function rtlDosPathNameToNtPathName (line 354) | func rtlDosPathNameToNtPathName(name *uint16, ntName *unicodeString, fil...
function rtlNtStatusToDosError (line 360) | func rtlNtStatusToDosError(status ntStatus) (winerr error) {
function wsaGetOverlappedResult (line 368) | func wsaGetOverlappedResult(h windows.Handle, o *windows.Overlapped, byt...
FILE: vendor/github.com/VividCortex/ewma/ewma.go
constant AVG_METRIC_AGE (line 10) | AVG_METRIC_AGE float64 = 30.0
constant DECAY (line 14) | DECAY float64 = 2 / (float64(AVG_METRIC_AGE) + 1)
constant WARMUP_SAMPLES (line 22) | WARMUP_SAMPLES uint8 = 10
type MovingAverage (line 28) | type MovingAverage interface
function NewMovingAverage (line 40) | func NewMovingAverage(age ...float64) MovingAverage {
type SimpleEWMA (line 59) | type SimpleEWMA struct
method Add (line 66) | func (e *SimpleEWMA) Add(value float64) {
method Value (line 75) | func (e *SimpleEWMA) Value() float64 {
method Set (line 80) | func (e *SimpleEWMA) Set(value float64) {
type VariableEWMA (line 86) | type VariableEWMA struct
method Add (line 96) | func (e *VariableEWMA) Add(value float64) {
method Value (line 112) | func (e *VariableEWMA) Value() float64 {
method Set (line 121) | func (e *VariableEWMA) Set(value float64) {
FILE: vendor/github.com/acarl005/stripansi/stripansi.go
constant ansi (line 7) | ansi = "[\u001B\u009B][[\\]()#;?]*(?:(?:(?:[a-zA-Z\\d]*(?:;[a-zA-Z\\d]*)...
function Strip (line 11) | func Strip(str string) string {
FILE: vendor/github.com/cespare/xxhash/v2/xxhash.go
constant prime1 (line 12) | prime1 uint64 = 11400714785074694791
constant prime2 (line 13) | prime2 uint64 = 14029467366897019727
constant prime3 (line 14) | prime3 uint64 = 1609587929392839161
constant prime4 (line 15) | prime4 uint64 = 9650029242287828579
constant prime5 (line 16) | prime5 uint64 = 2870177450012600261
type Digest (line 29) | type Digest struct
method Reset (line 53) | func (d *Digest) Reset() {
method ResetWithSeed (line 59) | func (d *Digest) ResetWithSeed(seed uint64) {
method Size (line 69) | func (d *Digest) Size() int { return 8 }
method BlockSize (line 72) | func (d *Digest) BlockSize() int { return 32 }
method Write (line 75) | func (d *Digest) Write(b []byte) (n int, err error) {
method Sum (line 113) | func (d *Digest) Sum(b []byte) []byte {
method Sum64 (line 129) | func (d *Digest) Sum64() uint64 {
method MarshalBinary (line 176) | func (d *Digest) MarshalBinary() ([]byte, error) {
method UnmarshalBinary (line 190) | func (d *Digest) UnmarshalBinary(b []byte) error {
function New (line 40) | func New() *Digest {
function NewWithSeed (line 45) | func NewWithSeed(seed uint64) *Digest {
constant magic (line 171) | magic = "xxh\x06"
constant marshaledSize (line 172) | marshaledSize = len(magic) + 8*5 + 32
function appendUint64 (line 208) | func appendUint64(b []byte, x uint64) []byte {
function consumeUint64 (line 214) | func consumeUint64(b []byte) ([]byte, uint64) {
function u64 (line 219) | func u64(b []byte) uint64 { return binary.LittleEndian.Uint64(b) }
function u32 (line 220) | func u32(b []byte) uint32 { return binary.LittleEndian.Uint32(b) }
function round (line 222) | func round(acc, input uint64) uint64 {
function mergeRound (line 229) | func mergeRound(acc, val uint64) uint64 {
function rol1 (line 236) | func rol1(x uint64) uint64 { return bits.RotateLeft64(x, 1) }
function rol7 (line 237) | func rol7(x uint64) uint64 { return bits.RotateLeft64(x, 7) }
function rol11 (line 238) | func rol11(x uint64) uint64 { return bits.RotateLeft64(x, 11) }
function rol12 (line 239) | func rol12(x uint64) uint64 { return bits.RotateLeft64(x, 12) }
function rol18 (line 240) | func rol18(x uint64) uint64 { return bits.RotateLeft64(x, 18) }
function rol23 (line 241) | func rol23(x uint64) uint64 { return bits.RotateLeft64(x, 23) }
function rol27 (line 242) | func rol27(x uint64) uint64 { return bits.RotateLeft64(x, 27) }
function rol31 (line 243) | func rol31(x uint64) uint64 { return bits.RotateLeft64(x, 31) }
FILE: vendor/github.com/cespare/xxhash/v2/xxhash_asm.go
function Sum64 (line 12) | func Sum64(b []byte) uint64
function writeBlocks (line 15) | func writeBlocks(d *Digest, b []byte) int
FILE: vendor/github.com/cespare/xxhash/v2/xxhash_other.go
function Sum64 (line 7) | func Sum64(b []byte) uint64 {
function writeBlocks (line 64) | func writeBlocks(d *Digest, b []byte) int {
FILE: vendor/github.com/cespare/xxhash/v2/xxhash_safe.go
function Sum64String (line 9) | func Sum64String(s string) uint64 {
method WriteString (line 14) | func (d *Digest) WriteString(s string) (n int, err error) {
FILE: vendor/github.com/cespare/xxhash/v2/xxhash_unsafe.go
function Sum64String (line 38) | func Sum64String(s string) uint64 {
method WriteString (line 45) | func (d *Digest) WriteString(s string) (n int, err error) {
type sliceHeader (line 55) | type sliceHeader struct
FILE: vendor/github.com/clipperhouse/uax29/v2/graphemes/ansi.go
function ansiEscapeLength (line 11) | func ansiEscapeLength[T ~string | ~[]byte](data T) int {
function csiBodyLength (line 69) | func csiBodyLength[T ~string | ~[]byte](data T) int {
function oscLength (line 101) | func oscLength[T ~string | ~[]byte](data T) int {
function stSequenceLength (line 128) | func stSequenceLength[T ~string | ~[]byte](data T) int {
FILE: vendor/github.com/clipperhouse/uax29/v2/graphemes/ansi8.go
function ansiEscapeLength8Bit (line 11) | func ansiEscapeLength8Bit[T ~string | ~[]byte](data T) int {
function oscLengthC1 (line 53) | func oscLengthC1[T ~string | ~[]byte](data T) int {
function stSequenceLengthC1 (line 68) | func stSequenceLengthC1[T ~string | ~[]byte](data T) int {
FILE: vendor/github.com/clipperhouse/uax29/v2/graphemes/iterator.go
function FromString (line 7) | func FromString(s string) *Iterator[string] {
function FromBytes (line 16) | func FromBytes(b []byte) *Iterator[[]byte] {
type Iterator (line 25) | type Iterator struct
constant esc (line 50) | esc = 0x1B
constant cr (line 51) | cr = 0x0D
constant bel (line 52) | bel = 0x07
constant can (line 53) | can = 0x18
constant sub (line 54) | sub = 0x1A
constant st (line 55) | st = 0x9C
method Next (line 60) | func (iter *Iterator[T]) Next() bool {
method Value (line 105) | func (iter *Iterator[T]) Value() T {
method Start (line 110) | func (iter *Iterator[T]) Start() int {
method End (line 115) | func (iter *Iterator[T]) End() int {
method Reset (line 120) | func (iter *Iterator[T]) Reset() {
method SetText (line 126) | func (iter *Iterator[T]) SetText(data T) {
method First (line 133) | func (iter *Iterator[T]) First() T {
FILE: vendor/github.com/clipperhouse/uax29/v2/graphemes/reader.go
type Scanner (line 9) | type Scanner struct
function FromReader (line 19) | func FromReader(r io.Reader) *Scanner {
FILE: vendor/github.com/clipperhouse/uax29/v2/graphemes/splitfunc.go
method is (line 8) | func (lookup property) is(properties property) bool {
constant _Ignore (line 12) | _Ignore = _Extend
type incbState (line 16) | type incbState
constant incbNone (line 19) | incbNone incbState = iota
constant incbConsonant (line 20) | incbConsonant
constant incbLinker (line 21) | incbLinker
function splitFunc (line 29) | func splitFunc[T ~string | ~[]byte](data T, atEOF bool) (advance int, to...
FILE: vendor/github.com/clipperhouse/uax29/v2/graphemes/trie.go
type property (line 6) | type property
constant _CR (line 9) | _CR property = 1 << iota
constant _Control (line 10) | _Control
constant _Extend (line 11) | _Extend
constant _ExtendedPictographic (line 12) | _ExtendedPictographic
constant _InCBConsonant (line 13) | _InCBConsonant
constant _InCBExtend (line 14) | _InCBExtend
constant _InCBLinker (line 15) | _InCBLinker
constant _L (line 16) | _L
constant _LF (line 17) | _LF
constant _LV (line 18) | _LV
constant _LVT (line 19) | _LVT
constant _Prepend (line 20) | _Prepend
constant _RegionalIndicator (line 21) | _RegionalIndicator
constant _SpacingMark (line 22) | _SpacingMark
constant _T (line 23) | _T
constant _V (line 24) | _V
constant _ZWJ (line 25) | _ZWJ
function lookup (line 31) | func lookup[T ~string | ~[]byte](s T) (v property, sz int) {
function lookupValue (line 99) | func lookupValue(n uint32, b byte) property {
FILE: vendor/github.com/containerd/errdefs/errors.go
type cancelled (line 57) | type cancelled interface
function IsCanceled (line 62) | func IsCanceled(err error) bool {
type errUnknown (line 66) | type errUnknown struct
method Error (line 68) | func (errUnknown) Error() string { return "unknown" }
method Unknown (line 70) | func (errUnknown) Unknown() {}
method WithMessage (line 72) | func (e errUnknown) WithMessage(msg string) error {
type unknown (line 77) | type unknown interface
function IsUnknown (line 83) | func IsUnknown(err error) bool {
type errInvalidArgument (line 87) | type errInvalidArgument struct
method Error (line 89) | func (errInvalidArgument) Error() string { return "invalid argument" }
method InvalidParameter (line 91) | func (errInvalidArgument) InvalidParameter() {}
method WithMessage (line 93) | func (e errInvalidArgument) WithMessage(msg string) error {
type invalidParameter (line 98) | type invalidParameter interface
function IsInvalidArgument (line 103) | func IsInvalidArgument(err error) bool {
type deadlineExceeded (line 108) | type deadlineExceeded interface
function IsDeadlineExceeded (line 114) | func IsDeadlineExceeded(err error) bool {
type errNotFound (line 118) | type errNotFound struct
method Error (line 120) | func (errNotFound) Error() string { return "not found" }
method NotFound (line 122) | func (errNotFound) NotFound() {}
method WithMessage (line 124) | func (e errNotFound) WithMessage(msg string) error {
type notFound (line 129) | type notFound interface
function IsNotFound (line 134) | func IsNotFound(err error) bool {
type errAlreadyExists (line 138) | type errAlreadyExists struct
method Error (line 140) | func (errAlreadyExists) Error() string { return "already exists" }
method AlreadyExists (line 142) | func (errAlreadyExists) AlreadyExists() {}
method WithMessage (line 144) | func (e errAlreadyExists) WithMessage(msg string) error {
type alreadyExists (line 148) | type alreadyExists interface
function IsAlreadyExists (line 154) | func IsAlreadyExists(err error) bool {
type errPermissionDenied (line 158) | type errPermissionDenied struct
method Error (line 160) | func (errPermissionDenied) Error() string { return "permission denied" }
method Forbidden (line 162) | func (errPermissionDenied) Forbidden() {}
method WithMessage (line 164) | func (e errPermissionDenied) WithMessage(msg string) error {
type forbidden (line 169) | type forbidden interface
function IsPermissionDenied (line 175) | func IsPermissionDenied(err error) bool {
type errResourceExhausted (line 179) | type errResourceExhausted struct
method Error (line 181) | func (errResourceExhausted) Error() string { return "resource exhauste...
method ResourceExhausted (line 183) | func (errResourceExhausted) ResourceExhausted() {}
method WithMessage (line 185) | func (e errResourceExhausted) WithMessage(msg string) error {
type resourceExhausted (line 189) | type resourceExhausted interface
function IsResourceExhausted (line 195) | func IsResourceExhausted(err error) bool {
type errFailedPrecondition (line 199) | type errFailedPrecondition struct
method Error (line 201) | func (e errFailedPrecondition) Error() string { return "failed precond...
method FailedPrecondition (line 203) | func (errFailedPrecondition) FailedPrecondition() {}
method WithMessage (line 205) | func (e errFailedPrecondition) WithMessage(msg string) error {
type failedPrecondition (line 209) | type failedPrecondition interface
function IsFailedPrecondition (line 215) | func IsFailedPrecondition(err error) bool {
type errConflict (line 219) | type errConflict struct
method Error (line 221) | func (errConflict) Error() string { return "conflict" }
method Conflict (line 223) | func (errConflict) Conflict() {}
method WithMessage (line 225) | func (e errConflict) WithMessage(msg string) error {
type conflict (line 230) | type conflict interface
function IsConflict (line 236) | func IsConflict(err error) bool {
type errNotModified (line 240) | type errNotModified struct
method Error (line 242) | func (errNotModified) Error() string { return "not modified" }
method NotModified (line 244) | func (errNotModified) NotModified() {}
method WithMessage (line 246) | func (e errNotModified) WithMessage(msg string) error {
type notModified (line 251) | type notModified interface
function IsNotModified (line 257) | func IsNotModified(err error) bool {
type errAborted (line 261) | type errAborted struct
method Error (line 263) | func (errAborted) Error() string { return "aborted" }
method Aborted (line 265) | func (errAborted) Aborted() {}
method WithMessage (line 267) | func (e errAborted) WithMessage(msg string) error {
type aborted (line 271) | type aborted interface
function IsAborted (line 276) | func IsAborted(err error) bool {
type errOutOfRange (line 280) | type errOutOfRange struct
method Error (line 282) | func (errOutOfRange) Error() string { return "out of range" }
method OutOfRange (line 284) | func (errOutOfRange) OutOfRange() {}
method WithMessage (line 286) | func (e errOutOfRange) WithMessage(msg string) error {
type outOfRange (line 290) | type outOfRange interface
function IsOutOfRange (line 296) | func IsOutOfRange(err error) bool {
type errNotImplemented (line 300) | type errNotImplemented struct
method Error (line 302) | func (errNotImplemented) Error() string { return "not implemented" }
method NotImplemented (line 304) | func (errNotImplemented) NotImplemented() {}
method WithMessage (line 306) | func (e errNotImplemented) WithMessage(msg string) error {
type notImplemented (line 311) | type notImplemented interface
function IsNotImplemented (line 316) | func IsNotImplemented(err error) bool {
type errInternal (line 320) | type errInternal struct
method Error (line 322) | func (errInternal) Error() string { return "internal" }
method System (line 324) | func (errInternal) System() {}
method WithMessage (line 326) | func (e errInternal) WithMessage(msg string) error {
type system (line 331) | type system interface
function IsInternal (line 336) | func IsInternal(err error) bool {
type errUnavailable (line 340) | type errUnavailable struct
method Error (line 342) | func (errUnavailable) Error() string { return "unavailable" }
method Unavailable (line 344) | func (errUnavailable) Unavailable() {}
method WithMessage (line 346) | func (e errUnavailable) WithMessage(msg string) error {
type unavailable (line 351) | type unavailable interface
function IsUnavailable (line 356) | func IsUnavailable(err error) bool {
type errDataLoss (line 360) | type errDataLoss struct
method Error (line 362) | func (errDataLoss) Error() string { return "data loss" }
method DataLoss (line 364) | func (errDataLoss) DataLoss() {}
method WithMessage (line 366) | func (e errDataLoss) WithMessage(msg string) error {
type dataLoss (line 371) | type dataLoss interface
function IsDataLoss (line 376) | func IsDataLoss(err error) bool {
type errUnauthorized (line 380) | type errUnauthorized struct
method Error (line 382) | func (errUnauthorized) Error() string { return "unauthorized" }
method Unauthorized (line 384) | func (errUnauthorized) Unauthorized() {}
method WithMessage (line 386) | func (e errUnauthorized) WithMessage(msg string) error {
type unauthorized (line 391) | type unauthorized interface
function IsUnauthorized (line 397) | func IsUnauthorized(err error) bool {
function isInterface (line 401) | func isInterface[T any](err error) bool {
type customMessage (line 428) | type customMessage struct
method Is (line 433) | func (c customMessage) Is(err error) bool {
method As (line 437) | func (c customMessage) As(target any) bool {
method Error (line 441) | func (c customMessage) Error() string {
FILE: vendor/github.com/containerd/errdefs/pkg/errhttp/http.go
function ToHTTP (line 33) | func ToHTTP(err error) int {
function ToNative (line 69) | func ToNative(statusCode int) error {
FILE: vendor/github.com/containerd/errdefs/pkg/internal/cause/cause.go
type ErrUnexpectedStatus (line 23) | type ErrUnexpectedStatus struct
method Error (line 29) | func (e ErrUnexpectedStatus) Error() string {
method Unknown (line 33) | func (ErrUnexpectedStatus) Unknown() {}
constant UnexpectedStatusPrefix (line 27) | UnexpectedStatusPrefix = "unexpected status "
FILE: vendor/github.com/containerd/errdefs/resolve.go
function Resolve (line 34) | func Resolve(err error) error {
function firstError (line 45) | func firstError(err error) error {
FILE: vendor/github.com/containerd/stargz-snapshotter/estargz/build.go
type GzipHelperFunc (line 46) | type GzipHelperFunc
type options (line 48) | type options struct
type Option (line 59) | type Option
function WithChunkSize (line 62) | func WithChunkSize(chunkSize int) Option {
function WithCompressionLevel (line 73) | func WithCompressionLevel(level int) Option {
function WithPrioritizedFiles (line 84) | func WithPrioritizedFiles(files []string) Option {
function WithAllowPrioritizeNotFound (line 95) | func WithAllowPrioritizeNotFound(missedFiles *[]string) Option {
function WithCompression (line 107) | func WithCompression(compression Compression) Option {
function WithContext (line 115) | func WithContext(ctx context.Context) Option {
function WithMinChunkSize (line 127) | func WithMinChunkSize(minChunkSize int) Option {
function WithGzipHelperFunc (line 139) | func WithGzipHelperFunc(gzipHelperFunc GzipHelperFunc) Option {
type Blob (line 147) | type Blob struct
method DiffID (line 157) | func (b *Blob) DiffID() digest.Digest {
method TOCDigest (line 162) | func (b *Blob) TOCDigest() digest.Digest {
method UncompressedSize (line 168) | func (b *Blob) UncompressedSize() (int64, error) {
function Build (line 184) | func Build(tarBlob *io.SectionReader, opt ...Option) (_ *Blob, rErr erro...
function closeWithCombine (line 327) | func closeWithCombine(ws ...*Writer) (tocAndFooterR io.Reader, tocDgst d...
function tocAndFooter (line 365) | func tocAndFooter(compressor Compressor, toc *JTOC, offset int64) (io.Re...
function divideEntries (line 376) | func divideEntries(entries []*entry, minPartsNum int) (set [][]*entry) {
function sortEntries (line 403) | func sortEntries(in io.ReaderAt, prioritized []string, missedPrioritized...
function readerFromEntries (line 449) | func readerFromEntries(entries ...*entry) io.Reader {
function importTar (line 469) | func importTar(in io.ReaderAt) (*tarFile, error) {
function moveRec (line 506) | func moveRec(name string, in *tarFile, out *tarFile, picked map[string]s...
type entry (line 546) | type entry struct
type tarFile (line 551) | type tarFile struct
method add (line 556) | func (f *tarFile) add(e *entry) {
method remove (line 564) | func (f *tarFile) remove(name string) {
method get (line 579) | func (f *tarFile) get(name string) (e *entry, ok bool) {
method dump (line 587) | func (f *tarFile) dump(skip map[string]struct{}) []*entry {
type readCloser (line 601) | type readCloser struct
method Close (line 606) | func (rc readCloser) Close() error {
function fileSectionReader (line 610) | func fileSectionReader(file *os.File) (*io.SectionReader, error) {
function newTempFiles (line 618) | func newTempFiles() *tempFiles {
type tempFiles (line 622) | type tempFiles struct
method TempFile (line 628) | func (tf *tempFiles) TempFile(dir, pattern string) (*os.File, error) {
method CleanupAll (line 639) | func (tf *tempFiles) CleanupAll() (err error) {
method cleanupAll (line 646) | func (tf *tempFiles) cleanupAll() error {
function newCountReadSeeker (line 662) | func newCountReadSeeker(r io.ReaderAt) (*countReadSeeker, error) {
type countReadSeeker (line 667) | type countReadSeeker struct
method Read (line 674) | func (cr *countReadSeeker) Read(p []byte) (int, error) {
method Seek (line 685) | func (cr *countReadSeeker) Seek(offset int64, whence int) (int64, erro...
method currentPos (line 706) | func (cr *countReadSeeker) currentPos() int64 {
function decompressBlob (line 713) | func decompressBlob(org *io.SectionReader, tmp *tempFiles, gzipHelperFun...
FILE: vendor/github.com/containerd/stargz-snapshotter/estargz/errorutil/errors.go
function Aggregate (line 26) | func Aggregate(errs []error) error {
FILE: vendor/github.com/containerd/stargz-snapshotter/estargz/estargz.go
type Reader (line 47) | type Reader struct
method initFields (line 203) | func (r *Reader) initFields() error {
method getSource (line 322) | func (r *Reader) getSource(ent *TOCEntry) (_ *TOCEntry, err error) {
method getOrCreateDir (line 341) | func (r *Reader) getOrCreateDir(d string) *TOCEntry {
method TOCDigest (line 359) | func (r *Reader) TOCDigest() digest.Digest {
method VerifyTOC (line 367) | func (r *Reader) VerifyTOC(tocDigest digest.Digest) (TOCEntryVerifier,...
method Verifiers (line 377) | func (r *Reader) Verifiers() (TOCEntryVerifier, error) {
method ChunkEntryForOffset (line 461) | func (r *Reader) ChunkEntryForOffset(name string, offset int64) (e *TO...
method Lookup (line 488) | func (r *Reader) Lookup(path string) (e *TOCEntry, ok bool) {
method OpenFile (line 507) | func (r *Reader) OpenFile(name string) (*io.SectionReader, error) {
method newFileReader (line 515) | func (r *Reader) newFileReader(name string) (*fileReader, error) {
method OpenFileWithPreReader (line 540) | func (r *Reader) OpenFileWithPreReader(name string, preRead func(*TOCE...
method getChunks (line 549) | func (r *Reader) getChunks(ent *TOCEntry) []*TOCEntry {
type openOpts (line 63) | type openOpts struct
type OpenOption (line 70) | type OpenOption
function WithTOCOffset (line 73) | func WithTOCOffset(tocOffset int64) OpenOption {
function WithDecompressors (line 82) | func WithDecompressors(decompressors ...Decompressor) OpenOption {
function WithTelemetry (line 90) | func WithTelemetry(telemetry *Telemetry) OpenOption {
type MeasureLatencyHook (line 98) | type MeasureLatencyHook
type Telemetry (line 102) | type Telemetry struct
function Open (line 112) | func Open(sr *io.SectionReader, opt ...OpenOption) (*Reader, error) {
function OpenFooter (line 177) | func OpenFooter(sr *io.SectionReader) (tocOffset int64, footerSize int64...
function parentDir (line 336) | func parentDir(p string) string {
type verifier (line 441) | type verifier struct
method Verifier (line 447) | func (v *verifier) Verifier(ce *TOCEntry) (digest.Verifier, error) {
type fileReader (line 556) | type fileReader struct
method ReadAt (line 563) | func (fr *fileReader) ReadAt(p []byte, off int64) (n int, err error) {
type Writer (line 662) | type Writer struct
method chunkSize (line 707) | func (w *Writer) chunkSize() int {
method Close (line 770) | func (w *Writer) Close() (digest.Digest, error) {
method closeGz (line 792) | func (w *Writer) closeGz() error {
method flushGz (line 805) | func (w *Writer) flushGz() error {
method nameIfChanged (line 821) | func (w *Writer) nameIfChanged(mp *map[int]string, id int, name string...
method condOpenGz (line 835) | func (w *Writer) condOpenGz() (err error) {
method AppendTar (line 850) | func (w *Writer) AppendTar(r io.Reader) error {
method AppendTarLossLess (line 867) | func (w *Writer) AppendTarLossLess(r io.Reader) error {
method appendTar (line 871) | func (w *Writer) appendTar(r io.Reader, lossless bool) error {
method needsOpenGz (line 1059) | func (w *Writer) needsOpenGz(ent *TOCEntry) bool {
method DiffID (line 1072) | func (w *Writer) DiffID() string {
type currentCompressionWriter (line 695) | type currentCompressionWriter struct
method Write (line 697) | func (ccw currentCompressionWriter) Write(p []byte) (int, error) {
function Unpack (line 716) | func Unpack(sr *io.SectionReader, c Decompressor) (io.ReadCloser, error) {
function NewWriter (line 739) | func NewWriter(w io.Writer) *Writer {
function NewWriterLevel (line 747) | func NewWriterLevel(w io.Writer, compressionLevel int) *Writer {
function NewWriterWithCompressor (line 755) | func NewWriterWithCompressor(w io.Writer, c Compressor) *Writer {
function maxFooterSize (line 1076) | func maxFooterSize(blobSize int64, decompressors ...Decompressor) (res i...
function parseTOC (line 1085) | func parseTOC(d Decompressor, sr *io.SectionReader, tocOff, tocSize int6...
function formatModtime (line 1148) | func formatModtime(t time.Time) string {
function cleanEntryName (line 1155) | func cleanEntryName(name string) string {
type countWriter (line 1162) | type countWriter struct
method Write (line 1167) | func (cw *countWriter) Write(p []byte) (n int, err error) {
type countWriteFlusher (line 1173) | type countWriteFlusher struct
method register (line 1178) | func (wc *countWriteFlusher) register(w io.WriteCloser) io.WriteCloser {
method Write (line 1183) | func (wc *countWriteFlusher) Write(p []byte) (n int, err error) {
method Flush (line 1189) | func (wc *countWriteFlusher) Flush() error {
method Close (line 1198) | func (wc *countWriteFlusher) Close() error {
function isGzip (line 1206) | func isGzip(br *bufio.Reader) bool {
function positive (line 1216) | func positive(n int64) int64 {
type countReader (line 1223) | type countReader struct
method Read (line 1228) | func (cr *countReader) Read(p []byte) (n int, err error) {
FILE: vendor/github.com/containerd/stargz-snapshotter/estargz/gzip.go
type gzipCompression (line 39) | type gzipCompression struct
function newGzipCompressionWithLevel (line 44) | func newGzipCompressionWithLevel(level int) Compression {
function NewGzipCompressor (line 51) | func NewGzipCompressor() *GzipCompressor {
function NewGzipCompressorWithLevel (line 55) | func NewGzipCompressorWithLevel(level int) *GzipCompressor {
type GzipCompressor (line 59) | type GzipCompressor struct
method Writer (line 63) | func (gc *GzipCompressor) Writer(w io.Writer) (WriteFlushCloser, error) {
method WriteTOCAndFooter (line 67) | func (gc *GzipCompressor) WriteTOCAndFooter(w io.Writer, off int64, to...
function gzipFooterBytes (line 102) | func gzipFooterBytes(tocOff int64) []byte {
type GzipDecompressor (line 120) | type GzipDecompressor struct
method Reader (line 122) | func (gz *GzipDecompressor) Reader(r io.Reader) (io.ReadCloser, error) {
method ParseTOC (line 126) | func (gz *GzipDecompressor) ParseTOC(r io.Reader) (toc *JTOC, tocDgst ...
method ParseFooter (line 130) | func (gz *GzipDecompressor) ParseFooter(p []byte) (blobPayloadSize, to...
method FooterSize (line 157) | func (gz *GzipDecompressor) FooterSize() int64 {
method DecompressTOC (line 161) | func (gz *GzipDecompressor) DecompressTOC(r io.Reader) (tocJSON io.Rea...
type LegacyGzipDecompressor (line 165) | type LegacyGzipDecompressor struct
method Reader (line 167) | func (gz *LegacyGzipDecompressor) Reader(r io.Reader) (io.ReadCloser, ...
method ParseTOC (line 171) | func (gz *LegacyGzipDecompressor) ParseTOC(r io.Reader) (toc *JTOC, to...
method ParseFooter (line 175) | func (gz *LegacyGzipDecompressor) ParseFooter(p []byte) (blobPayloadSi...
method FooterSize (line 198) | func (gz *LegacyGzipDecompressor) FooterSize() int64 {
method DecompressTOC (line 202) | func (gz *LegacyGzipDecompressor) DecompressTOC(r io.Reader) (tocJSON ...
function parseTOCEStargz (line 206) | func parseTOCEStargz(r io.Reader) (toc *JTOC, tocDgst digest.Digest, err...
function decompressTOCEStargz (line 222) | func decompressTOCEStargz(r io.Reader) (tocJSON io.ReadCloser, err error) {
FILE: vendor/github.com/containerd/stargz-snapshotter/estargz/testutil.go
type TestingController (line 49) | type TestingController interface
type TestingT (line 59) | type TestingT interface
type Runner (line 72) | type Runner
type TestRunner (line 74) | type TestRunner struct
method Run (line 79) | func (r *TestRunner) Run(name string, run func(*TestRunner)) {
function CompressionTestSuite (line 86) | func CompressionTestSuite(t *TestRunner, controllers ...TestingControlle...
type TestingControllerFactory (line 95) | type TestingControllerFactory
constant uncompressedType (line 98) | uncompressedType int = iota
constant gzipType (line 99) | gzipType
constant zstdType (line 100) | zstdType
function testBuild (line 113) | func testBuild(t *TestRunner, controllers ...TestingControllerFactory) {
function isSameTarGz (line 299) | func isSameTarGz(t TestingT, cla TestingController, a []byte, clb Testin...
function isSameVersion (line 359) | func isSameVersion(t TestingT, cla TestingController, a []byte, clb Test...
function isSameEntries (line 373) | func isSameEntries(t TestingT, a, b *Reader) bool {
function compressBlob (line 387) | func compressBlob(t TestingT, src *io.SectionReader, srcCompression int)...
type stargzEntry (line 414) | type stargzEntry struct
function contains (line 421) | func contains(t TestingT, a, b stargzEntry) bool {
function allChildrenName (line 498) | func allChildrenName(e *TOCEntry) (children []string) {
function equalEntry (line 506) | func equalEntry(a, b *TOCEntry) bool {
function readOffset (line 532) | func readOffset(t TestingT, r *io.SectionReader, offset int64, e stargzE...
function dumpTOCJSON (line 551) | func dumpTOCJSON(t TestingT, tocJSON *JTOC) string {
constant chunkSize (line 563) | chunkSize = 3
type check (line 565) | type check
function testDigestAndVerify (line 568) | func testDigestAndVerify(t *TestRunner, controllers ...TestingController...
function checkStargzTOC (line 723) | func checkStargzTOC(t *TestRunner, sgzData []byte, tocDigest digest.Dige...
function checkVerifyTOC (line 834) | func checkVerifyTOC(t *TestRunner, sgzData []byte, tocDigest digest.Dige...
function checkVerifyInvalidTOCEntryFail (line 914) | func checkVerifyInvalidTOCEntryFail(filename string) check {
function checkVerifyInvalidStargzFail (line 990) | func checkVerifyInvalidStargzFail(invalid *io.SectionReader) check {
function checkVerifyBrokenContentFail (line 1022) | func checkVerifyBrokenContentFail(filename string) check {
function chunkID (line 1076) | func chunkID(name string, offset, size int64) string {
type rewriteFunc (line 1080) | type rewriteFunc
function rewriteTOCJSON (line 1082) | func rewriteTOCJSON(t TestingT, sgz *io.SectionReader, rewrite rewriteFu...
function listDigests (line 1105) | func listDigests(sgz *io.SectionReader, controller TestingController) (m...
function parseStargz (line 1130) | func parseStargz(sgz *io.SectionReader, controller TestingController) (d...
function testWriteAndOpen (line 1153) | func testWriteAndOpen(t *TestRunner, controllers ...TestingControllerFac...
type chunkInfo (line 1627) | type chunkInfo struct
function newCalledTelemetry (line 1632) | func newCalledTelemetry() (telemetry *Telemetry, check func(needsGetTOC ...
function digestFor (line 1657) | func digestFor(content string) string {
type numTOCEntries (line 1662) | type numTOCEntries
method check (line 1664) | func (n numTOCEntries) check(t TestingT, r *Reader) {
function checks (line 1681) | func checks(s ...stargzCheck) []stargzCheck { return s }
type stargzCheck (line 1683) | type stargzCheck interface
type stargzCheckFn (line 1687) | type stargzCheckFn
method check (line 1689) | func (f stargzCheckFn) check(t TestingT, r *Reader) { f(t, r) }
function maxDepth (line 1691) | func maxDepth(max int) stargzCheck {
function getMaxDepth (line 1709) | func getMaxDepth(t TestingT, e *TOCEntry, current, limit int) (max int, ...
function hasFileLen (line 1730) | func hasFileLen(file string, wantLen int) stargzCheck {
function hasFileXattrs (line 1746) | func hasFileXattrs(file, name, value string) stargzCheck {
function hasFileDigest (line 1773) | func hasFileDigest(file string, digest string) stargzCheck {
function hasFileContentsWithPreRead (line 1785) | func hasFileContentsWithPreRead(file string, offset int, want string, ex...
function hasFileContentsRange (line 1832) | func hasFileContentsRange(file string, offset int, want string) stargzCh...
function hasChunkEntries (line 1849) | func hasChunkEntries(file string, wantChunks int) stargzCheck {
function entryHasChildren (line 1893) | func entryHasChildren(dir string, want ...string) stargzCheck {
function hasDir (line 1912) | func hasDir(file string) stargzCheck {
function hasDirLinkCount (line 1926) | func hasDirLinkCount(file string, count int) stargzCheck {
function hasMode (line 1944) | func hasMode(file string, mode os.FileMode) stargzCheck {
function hasSymlink (line 1959) | func hasSymlink(file, target string) stargzCheck {
function lookupMatch (line 1975) | func lookupMatch(name string, want *TOCEntry) stargzCheck {
function hasEntryOwner (line 1988) | func hasEntryOwner(entry string, owner owner) stargzCheck {
function mustSameEntry (line 2002) | func mustSameEntry(files ...string) stargzCheck {
function viewContent (line 2056) | func viewContent(c []byte) string {
function tarOf (line 2063) | func tarOf(s ...tarEntry) []tarEntry { return s }
type tarEntry (line 2065) | type tarEntry interface
type tarEntryFunc (line 2069) | type tarEntryFunc
method appendTar (line 2071) | func (f tarEntryFunc) appendTar(tw *tar.Writer, prefix string, format ...
function buildTar (line 2075) | func buildTar(t TestingT, ents []tarEntry, prefix string, opts ...interf...
function dir (line 2099) | func dir(name string, opts ...interface{}) tarEntry {
type xAttr (line 2132) | type xAttr
type owner (line 2135) | type owner struct
function file (line 2140) | func file(name, contents string, opts ...interface{}) tarEntry {
function symlink (line 2184) | func symlink(name, target string) tarEntry {
function link (line 2196) | func link(name string, linkname string) tarEntry {
function chardev (line 2209) | func chardev(name string, major, minor int64) tarEntry {
function blockdev (line 2223) | func blockdev(name string, major, minor int64) tarEntry {
function fifo (line 2236) | func fifo(name string) tarEntry {
function prefetchLandmark (line 2248) | func prefetchLandmark() tarEntry {
function noPrefetchLandmark (line 2266) | func noPrefetchLandmark() tarEntry {
function regDigest (line 2284) | func regDigest(t TestingT, name string, contentStr string, digestMap map...
function randomContents (line 2324) | func randomContents(n int) string {
function fileModeToTarMode (line 2336) | func fileModeToTarMode(mode os.FileMode) (int64, error) {
type fileInfoOnlyMode (line 2345) | type fileInfoOnlyMode
method Name (line 2347) | func (f fileInfoOnlyMode) Name() string { return "" }
method Size (line 2348) | func (f fileInfoOnlyMode) Size() int64 { return 0 }
method Mode (line 2349) | func (f fileInfoOnlyMode) Mode() os.FileMode { return os.FileMode(f) }
method ModTime (line 2350) | func (f fileInfoOnlyMode) ModTime() time.Time { return time.Now() }
method IsDir (line 2351) | func (f fileInfoOnlyMode) IsDir() bool { return os.FileMode(f)....
method Sys (line 2352) | func (f fileInfoOnlyMode) Sys() interface{} { return nil }
function CheckGzipHasStreams (line 2354) | func CheckGzipHasStreams(t TestingT, b []byte, streams []int64) {
function GzipDiffIDOf (line 2392) | func GzipDiffIDOf(t TestingT, b []byte) string {
FILE: vendor/github.com/containerd/stargz-snapshotter/estargz/types.go
constant TOCTarName (line 39) | TOCTarName = "stargz.index.json"
constant FooterSize (line 59) | FooterSize = 51
constant legacyFooterSize (line 70) | legacyFooterSize = 47
constant TOCJSONDigestAnnotation (line 76) | TOCJSONDigestAnnotation = "containerd.io/snapshot/stargz/toc.digest"
constant StoreUncompressedSizeAnnotation (line 82) | StoreUncompressedSizeAnnotation = "io.containers.estargz.uncompressed-size"
constant PrefetchLandmark (line 86) | PrefetchLandmark = ".prefetch.landmark"
constant NoPrefetchLandmark (line 90) | NoPrefetchLandmark = ".no.prefetch.landmark"
constant landmarkContents (line 92) | landmarkContents = 0xf
type JTOC (line 96) | type JTOC struct
type TOCEntry (line 102) | type TOCEntry struct
method ModTime (line 201) | func (e *TOCEntry) ModTime() time.Time { return e.modTime }
method NextOffset (line 205) | func (e *TOCEntry) NextOffset() int64 { return e.nextOffset }
method addChild (line 207) | func (e *TOCEntry) addChild(baseName string, child *TOCEntry) {
method isDataType (line 219) | func (e *TOCEntry) isDataType() bool { return e.Type == "reg" || e.Typ...
method Stat (line 222) | func (e *TOCEntry) Stat() os.FileInfo { return fileInfo{e} }
method ForeachChild (line 226) | func (e *TOCEntry) ForeachChild(f func(baseName string, ent *TOCEntry)...
method LookupChild (line 235) | func (e *TOCEntry) LookupChild(baseName string) (child *TOCEntry, ok b...
type fileInfo (line 241) | type fileInfo struct
method Name (line 245) | func (fi fileInfo) Name() string { return path.Base(fi.e.Name) }
method IsDir (line 246) | func (fi fileInfo) IsDir() bool { return fi.e.Type == "dir" }
method Size (line 247) | func (fi fileInfo) Size() int64 { return fi.e.Size }
method ModTime (line 248) | func (fi fileInfo) ModTime() time.Time { return fi.e.ModTime() }
method Sys (line 249) | func (fi fileInfo) Sys() interface{} { return fi.e }
method Mode (line 250) | func (fi fileInfo) Mode() (m os.FileMode) {
type TOCEntryVerifier (line 271) | type TOCEntryVerifier interface
type Compression (line 281) | type Compression interface
type Compressor (line 287) | type Compressor interface
type Decompressor (line 307) | type Decompressor interface
type WriteFlushCloser (line 339) | type WriteFlushCloser interface
FILE: vendor/github.com/containers/libtrust/certificates.go
type certTemplateInfo (line 15) | type certTemplateInfo struct
function generateCertTemplate (line 24) | func generateCertTemplate(info *certTemplateInfo) *x509.Certificate {
function generateCert (line 61) | func generateCert(pub PublicKey, priv PrivateKey, subInfo, issInfo *cert...
function GenerateSelfSignedServerCert (line 84) | func GenerateSelfSignedServerCert(key PrivateKey, domains []string, ipAd...
function GenerateSelfSignedClientCert (line 97) | func GenerateSelfSignedClientCert(key PrivateKey) (*x509.Certificate, er...
function GenerateCACert (line 108) | func GenerateCACert(signer PrivateKey, trustedKey PublicKey) (*x509.Cert...
function GenerateCACertPool (line 123) | func GenerateCACertPool(signer PrivateKey, trustedKeys []PublicKey) (*x5...
function LoadCertificateBundle (line 140) | func LoadCertificateBundle(filename string) ([]*x509.Certificate, error) {
function LoadCertificatePool (line 165) | func LoadCertificatePool(filename string) (*x509.CertPool, error) {
FILE: vendor/github.com/containers/libtrust/ec_key.go
type ecPublicKey (line 23) | type ecPublicKey struct
method KeyType (line 46) | func (k *ecPublicKey) KeyType() string {
method CurveName (line 52) | func (k *ecPublicKey) CurveName() string {
method KeyID (line 57) | func (k *ecPublicKey) KeyID() string {
method String (line 61) | func (k *ecPublicKey) String() string {
method Verify (line 69) | func (k *ecPublicKey) Verify(data io.Reader, alg string, signature []b...
method CryptoPublicKey (line 104) | func (k *ecPublicKey) CryptoPublicKey() crypto.PublicKey {
method toMap (line 108) | func (k *ecPublicKey) toMap() map[string]interface{} {
method MarshalJSON (line 135) | func (k *ecPublicKey) MarshalJSON() (data []byte, err error) {
method PEMBlock (line 140) | func (k *ecPublicKey) PEMBlock() (*pem.Block, error) {
method AddExtendedField (line 149) | func (k *ecPublicKey) AddExtendedField(field string, value interface{}) {
method GetExtendedField (line 153) | func (k *ecPublicKey) GetExtendedField(field string) interface{} {
function fromECPublicKey (line 30) | func fromECPublicKey(cryptoPublicKey *ecdsa.PublicKey) (*ecPublicKey, er...
function ecPublicKeyFromMap (line 161) | func ecPublicKeyFromMap(jwk map[string]interface{}) (*ecPublicKey, error) {
type ecPrivateKey (line 238) | type ecPrivateKey struct
method PublicKey (line 253) | func (k *ecPrivateKey) PublicKey() PublicKey {
method String (line 257) | func (k *ecPrivateKey) String() string {
method Sign (line 267) | func (k *ecPrivateKey) Sign(data io.Reader, hashID crypto.Hash) (signa...
method CryptoPrivateKey (line 295) | func (k *ecPrivateKey) CryptoPrivateKey() crypto.PrivateKey {
method toMap (line 299) | func (k *ecPrivateKey) toMap() map[string]interface{} {
method MarshalJSON (line 324) | func (k *ecPrivateKey) MarshalJSON() (data []byte, err error) {
method PEMBlock (line 329) | func (k *ecPrivateKey) PEMBlock() (*pem.Block, error) {
function fromECPrivateKey (line 243) | func fromECPrivateKey(cryptoPrivateKey *ecdsa.PrivateKey) (*ecPrivateKey...
function ecPrivateKeyFromMap (line 338) | func ecPrivateKeyFromMap(jwk map[string]interface{}) (*ecPrivateKey, err...
function generateECPrivateKey (line 372) | func generateECPrivateKey(curve elliptic.Curve) (k *ecPrivateKey, err er...
function GenerateECP256PrivateKey (line 386) | func GenerateECP256PrivateKey() (PrivateKey, error) {
function GenerateECP384PrivateKey (line 399) | func GenerateECP384PrivateKey() (PrivateKey, error) {
function GenerateECP521PrivateKey (line 412) | func GenerateECP521PrivateKey() (PrivateKey, error) {
FILE: vendor/github.com/containers/libtrust/ec_key_no_openssl.go
method sign (line 14) | func (k *ecPrivateKey) sign(data io.Reader, hashID crypto.Hash) (r, s *b...
FILE: vendor/github.com/containers/libtrust/ec_key_openssl.go
method sign (line 15) | func (k *ecPrivateKey) sign(data io.Reader, hashID crypto.Hash) (r, s *b...
FILE: vendor/github.com/containers/libtrust/filter.go
function FilterByHosts (line 10) | func FilterByHosts(keys []PublicKey, host string, includeEmpty bool) ([]...
FILE: vendor/github.com/containers/libtrust/hash.go
type signatureAlgorithm (line 10) | type signatureAlgorithm struct
method HeaderParam (line 15) | func (h *signatureAlgorithm) HeaderParam() string {
method HashID (line 19) | func (h *signatureAlgorithm) HashID() crypto.Hash {
function rsaSignatureAlgorithmByName (line 32) | func rsaSignatureAlgorithmByName(alg string) (*signatureAlgorithm, error) {
function rsaPKCS1v15SignatureAlgorithmForHashID (line 45) | func rsaPKCS1v15SignatureAlgorithmForHashID(hashID crypto.Hash) *signatu...
FILE: vendor/github.com/containers/libtrust/jsonsign.go
type jsHeader (line 28) | type jsHeader struct
type jsSignature (line 34) | type jsSignature struct
type jsSignaturesSorted (line 40) | type jsSignaturesSorted
method Swap (line 42) | func (jsbkid jsSignaturesSorted) Swap(i, j int) { jsbkid[i], jsbkid[j]...
method Len (line 43) | func (jsbkid jsSignaturesSorted) Len() int { return len(jsbkid) }
method Less (line 45) | func (jsbkid jsSignaturesSorted) Less(i, j int) bool {
type signKey (line 56) | type signKey struct
type JSONSignature (line 62) | type JSONSignature struct
method Payload (line 78) | func (js *JSONSignature) Payload() ([]byte, error) {
method protectedHeader (line 82) | func (js *JSONSignature) protectedHeader() (string, error) {
method signBytes (line 96) | func (js *JSONSignature) signBytes(protectedHeader string) ([]byte, er...
method Sign (line 105) | func (js *JSONSignature) Sign(key PrivateKey) error {
method SignWithChain (line 134) | func (js *JSONSignature) SignWithChain(key PrivateKey, chain []*x509.C...
method Verify (line 173) | func (js *JSONSignature) Verify() ([]PublicKey, error) {
method VerifyChains (line 218) | func (js *JSONSignature) VerifyChains(ca *x509.CertPool) ([][]*x509.Ce...
method JWS (line 283) | func (js *JSONSignature) JWS() ([]byte, error) {
method PrettySignature (line 578) | func (js *JSONSignature) PrettySignature(signatureKey string) ([]byte,...
method Signatures (line 627) | func (js *JSONSignature) Signatures() ([][]byte, error) {
method Merge (line 646) | func (js *JSONSignature) Merge(others ...*JSONSignature) error {
function newJSONSignature (line 70) | func newJSONSignature() *JSONSignature {
function notSpace (line 298) | func notSpace(r rune) bool {
function detectJSONIndent (line 302) | func detectJSONIndent(jsonContent []byte) (indent string) {
type jsParsedHeader (line 312) | type jsParsedHeader struct
type jsParsedSignature (line 318) | type jsParsedSignature struct
function ParseJWS (line 325) | func ParseJWS(content []byte) (*JSONSignature, error) {
function NewJSONSignature (line 378) | func NewJSONSignature(content []byte, signatures ...[]byte) (*JSONSignat...
function NewJSONSignatureFromMap (line 441) | func NewJSONSignatureFromMap(content interface{}) (*JSONSignature, error) {
function readIntFromMap (line 465) | func readIntFromMap(key string, m map[string]interface{}) (int, bool) {
function readStringFromMap (line 480) | func readStringFromMap(key string, m map[string]interface{}) (v string, ...
function ParsePrettySignature (line 493) | func ParsePrettySignature(content []byte, signatureKey string) (*JSONSig...
FILE: vendor/github.com/containers/libtrust/key.go
type PublicKey (line 16) | type PublicKey interface
type PrivateKey (line 48) | type PrivateKey interface
function FromCryptoPublicKey (line 71) | func FromCryptoPublicKey(cryptoPublicKey crypto.PublicKey) (PublicKey, e...
function FromCryptoPrivateKey (line 85) | func FromCryptoPrivateKey(cryptoPrivateKey crypto.PrivateKey) (PrivateKe...
function UnmarshalPublicKeyPEM (line 98) | func UnmarshalPublicKeyPEM(data []byte) (PublicKey, error) {
function UnmarshalPublicKeyPEMBundle (line 112) | func UnmarshalPublicKeyPEMBundle(data []byte) ([]PublicKey, error) {
function UnmarshalPrivateKeyPEM (line 137) | func UnmarshalPrivateKeyPEM(data []byte) (PrivateKey, error) {
function UnmarshalPublicKeyJWK (line 172) | func UnmarshalPublicKeyJWK(data []byte) (PublicKey, error) {
function UnmarshalPublicKeyJWKSet (line 204) | func UnmarshalPublicKeyJWKSet(data []byte) ([]PublicKey, error) {
function UnmarshalPrivateKeyJWK (line 225) | func UnmarshalPrivateKeyJWK(data []byte) (PrivateKey, error) {
FILE: vendor/github.com/containers/libtrust/key_files.go
function readKeyFileBytes (line 18) | func readKeyFileBytes(filename string) ([]byte, error) {
function LoadKeyFile (line 39) | func LoadKeyFile(filename string) (PrivateKey, error) {
function LoadPublicKeyFile (line 64) | func LoadPublicKeyFile(filename string) (PublicKey, error) {
function SaveKey (line 89) | func SaveKey(filename string, key PrivateKey) error {
function SavePublicKey (line 117) | func SavePublicKey(filename string, key PublicKey) error {
type jwkSet (line 146) | type jwkSet struct
function LoadKeySetFile (line 151) | func LoadKeySetFile(filename string) ([]PublicKey, error) {
function loadJSONKeySetRaw (line 160) | func loadJSONKeySetRaw(data []byte) ([]json.RawMessage, error) {
function loadJSONKeySetFile (line 176) | func loadJSONKeySetFile(filename string) ([]PublicKey, error) {
function loadPEMKeySetFile (line 185) | func loadPEMKeySetFile(filename string) ([]PublicKey, error) {
function AddKeySetFile (line 195) | func AddKeySetFile(filename string, key PublicKey) error {
function addKeySetJSONFile (line 204) | func addKeySetJSONFile(filename string, key PublicKey) error {
function addKeySetPEMFile (line 236) | func addKeySetPEMFile(filename string, key PublicKey) error {
FILE: vendor/github.com/containers/libtrust/key_manager.go
type ClientKeyManager (line 15) | type ClientKeyManager struct
method loadKeys (line 43) | func (c *ClientKeyManager) loadKeys() (err error) {
method RegisterTLSConfig (line 78) | func (c *ClientKeyManager) RegisterTLSConfig(tlsConfig *tls.Config) er...
function NewClientKeyManager (line 29) | func NewClientKeyManager(trustKey PrivateKey, clientFile, clientDir stri...
function NewIdentityAuthTLSConfig (line 97) | func NewIdentityAuthTLSConfig(trustKey PrivateKey, clients *ClientKeyMan...
function NewCertAuthTLSConfig (line 127) | func NewCertAuthTLSConfig(caPath, certPath, keyPath string) (*tls.Config...
function newTLSConfig (line 152) | func newTLSConfig() *tls.Config {
function parseAddr (line 161) | func parseAddr(addr string) ([]net.IP, []string, error) {
FILE: vendor/github.com/containers/libtrust/rsa_key.go
type rsaPublicKey (line 21) | type rsaPublicKey struct
method KeyType (line 31) | func (k *rsaPublicKey) KeyType() string {
method KeyID (line 36) | func (k *rsaPublicKey) KeyID() string {
method String (line 40) | func (k *rsaPublicKey) String() string {
method Verify (line 48) | func (k *rsaPublicKey) Verify(data io.Reader, alg string, signature []...
method CryptoPublicKey (line 73) | func (k *rsaPublicKey) CryptoPublicKey() crypto.PublicKey {
method toMap (line 77) | func (k *rsaPublicKey) toMap() map[string]interface{} {
method MarshalJSON (line 92) | func (k *rsaPublicKey) MarshalJSON() (data []byte, err error) {
method PEMBlock (line 97) | func (k *rsaPublicKey) PEMBlock() (*pem.Block, error) {
method AddExtendedField (line 106) | func (k *rsaPublicKey) AddExtendedField(field string, value interface{...
method GetExtendedField (line 110) | func (k *rsaPublicKey) GetExtendedField(field string) interface{} {
function fromRSAPublicKey (line 26) | func fromRSAPublicKey(cryptoPublicKey *rsa.PublicKey) *rsaPublicKey {
function rsaPublicKeyFromMap (line 118) | func rsaPublicKeyFromMap(jwk map[string]interface{}) (*rsaPublicKey, err...
type rsaPrivateKey (line 175) | type rsaPrivateKey struct
method PublicKey (line 188) | func (k *rsaPrivateKey) PublicKey() PublicKey {
method String (line 192) | func (k *rsaPrivateKey) String() string {
method Sign (line 202) | func (k *rsaPrivateKey) Sign(data io.Reader, hashID crypto.Hash) (sign...
method CryptoPrivateKey (line 226) | func (k *rsaPrivateKey) CryptoPrivateKey() crypto.PrivateKey {
method toMap (line 230) | func (k *rsaPrivateKey) toMap() map[string]interface{} {
method MarshalJSON (line 261) | func (k *rsaPrivateKey) MarshalJSON() (data []byte, err error) {
method PEMBlock (line 266) | func (k *rsaPrivateKey) PEMBlock() (*pem.Block, error) {
function fromRSAPrivateKey (line 180) | func fromRSAPrivateKey(cryptoPrivateKey *rsa.PrivateKey) *rsaPrivateKey {
function rsaPrivateKeyFromMap (line 272) | func rsaPrivateKeyFromMap(jwk map[string]interface{}) (*rsaPrivateKey, e...
function generateRSAPrivateKey (line 386) | func generateRSAPrivateKey(bits int) (k *rsaPrivateKey, err error) {
function GenerateRSA2048PrivateKey (line 400) | func GenerateRSA2048PrivateKey() (PrivateKey, error) {
function GenerateRSA3072PrivateKey (line 410) | func GenerateRSA3072PrivateKey() (PrivateKey, error) {
function GenerateRSA4096PrivateKey (line 420) | func GenerateRSA4096PrivateKey() (PrivateKey, error) {
FILE: vendor/github.com/containers/libtrust/util.go
function LoadOrCreateTrustKey (line 24) | func LoadOrCreateTrustKey(trustKeyPath string) (PrivateKey, error) {
function NewIdentityAuthTLSClientConfig (line 55) | func NewIdentityAuthTLSClientConfig(dockerUrl string, trustUnknownHosts ...
function joseBase64UrlEncode (line 158) | func joseBase64UrlEncode(b []byte) string {
function joseBase64UrlDecode (line 166) | func joseBase64UrlDecode(s string) ([]byte, error) {
function keyIDEncode (line 181) | func keyIDEncode(b []byte) string {
function keyIDFromCryptoKey (line 194) | func keyIDFromCryptoKey(pubKey PublicKey) string {
function stringFromMap (line 209) | func stringFromMap(m map[string]interface{}, key string) (string, error) {
function parseECCoordinate (line 224) | func parseECCoordinate(cB64Url string, curve elliptic.Curve) (*big.Int, ...
function parseECPrivateParam (line 238) | func parseECPrivateParam(dB64Url string, curve elliptic.Curve) (*big.Int...
function parseRSAModulusParam (line 263) | func parseRSAModulusParam(nB64Url string) (*big.Int, error) {
function serializeRSAPublicExponentParam (line 272) | func serializeRSAPublicExponentParam(e int) []byte {
function parseRSAPublicExponentParam (line 288) | func parseRSAPublicExponentParam(eB64Url string) (int, error) {
function parseRSAPrivateKeyParamFromMap (line 303) | func parseRSAPrivateKeyParamFromMap(m map[string]interface{}, key string...
function createPemBlock (line 317) | func createPemBlock(name string, derBytes []byte, headers map[string]int...
function pubKeyFromPEMBlock (line 337) | func pubKeyFromPEMBlock(pemBlock *pem.Block) (PublicKey, error) {
function addPEMHeadersToKey (line 353) | func addPEMHeadersToKey(pemBlock *pem.Block, pubKey PublicKey) {
FILE: vendor/github.com/containers/ocicrypt/blockcipher/blockcipher.go
type LayerCipherType (line 28) | type LayerCipherType
constant AES256CTR (line 32) | AES256CTR LayerCipherType = "AES_256_CTR_HMAC_SHA256"
type PrivateLayerBlockCipherOptions (line 37) | type PrivateLayerBlockCipherOptions struct
type PublicLayerBlockCipherOptions (line 54) | type PublicLayerBlockCipherOptions struct
type LayerBlockCipherOptions (line 69) | type LayerBlockCipherOptions struct
method GetOpt (line 94) | func (lbco LayerBlockCipherOptions) GetOpt(key string) (value []byte, ...
type LayerBlockCipher (line 76) | type LayerBlockCipher interface
type LayerBlockCipherHandler (line 86) | type LayerBlockCipherHandler struct
method Encrypt (line 115) | func (h *LayerBlockCipherHandler) Encrypt(plainDataReader io.Reader, t...
method Decrypt (line 136) | func (h *LayerBlockCipherHandler) Decrypt(encDataReader io.Reader, opt...
type Finalizer (line 91) | type Finalizer
function wrapFinalizerWithType (line 103) | func wrapFinalizerWithType(fin Finalizer, typ LayerCipherType) Finalizer {
function NewLayerBlockCipherHandler (line 148) | func NewLayerBlockCipherHandler() (*LayerBlockCipherHandler, error) {
FILE: vendor/github.com/containers/ocicrypt/blockcipher/blockcipher_aes_ctr.go
type AESCTRLayerBlockCipher (line 34) | type AESCTRLayerBlockCipher struct
method init (line 109) | func (bc *AESCTRLayerBlockCipher) init(encrypt bool, reader io.Reader,...
method GenerateKey (line 157) | func (bc *AESCTRLayerBlockCipher) GenerateKey() ([]byte, error) {
method Encrypt (line 166) | func (bc *AESCTRLayerBlockCipher) Encrypt(plainDataReader io.Reader, o...
method Decrypt (line 186) | func (bc *AESCTRLayerBlockCipher) Decrypt(encDataReader io.Reader, opt...
type aesctrcryptor (line 45) | type aesctrcryptor struct
method Read (line 57) | func (r *aesctrcryptor) Read(p []byte) (int, error) {
function NewAESCTRLayerBlockCipher (line 50) | func NewAESCTRLayerBlockCipher(bits int) (LayerBlockCipher, error) {
FILE: vendor/github.com/containers/ocicrypt/config/config.go
type EncryptConfig (line 22) | type EncryptConfig struct
method AttachDecryptConfig (line 100) | func (ec *EncryptConfig) AttachDecryptConfig(dc *DecryptConfig) {
type DecryptConfig (line 30) | type DecryptConfig struct
type CryptoConfig (line 37) | type CryptoConfig struct
function InitDecryption (line 43) | func InitDecryption(dcparameters map[string][][]byte) CryptoConfig {
function InitEncryption (line 54) | func InitEncryption(parameters, dcparameters map[string][][]byte) Crypto...
function CombineCryptoConfigs (line 67) | func CombineCryptoConfigs(ccs []CryptoConfig) CryptoConfig {
function addToMap (line 106) | func addToMap(orig map[string][][]byte, add map[string][][]byte) {
FILE: vendor/github.com/containers/ocicrypt/config/constructors.go
function EncryptWithJwe (line 29) | func EncryptWithJwe(pubKeys [][]byte) (CryptoConfig, error) {
function EncryptWithPkcs7 (line 45) | func EncryptWithPkcs7(x509s [][]byte) (CryptoConfig, error) {
function EncryptWithGpg (line 62) | func EncryptWithGpg(gpgRecipients [][]byte, gpgPubRingFile []byte) (Cryp...
function EncryptWithPkcs11 (line 79) | func EncryptWithPkcs11(pkcs11Config *pkcs11.Pkcs11Config, pkcs11Pubkeys,...
function EncryptWithKeyProvider (line 113) | func EncryptWithKeyProvider(keyProviders [][]byte) (CryptoConfig, error) {
function DecryptWithKeyProvider (line 136) | func DecryptWithKeyProvider(keyProviders [][]byte) (CryptoConfig, error) {
function DecryptWithPrivKeys (line 161) | func DecryptWithPrivKeys(privKeys [][]byte, privKeysPasswords [][]byte) ...
function DecryptWithX509s (line 185) | func DecryptWithX509s(x509s [][]byte) (CryptoConfig, error) {
function DecryptWithGpgPrivKeys (line 204) | func DecryptWithGpgPrivKeys(gpgPrivKeys, gpgPrivKeysPwds [][]byte) (Cryp...
function DecryptWithPkcs11Yaml (line 224) | func DecryptWithPkcs11Yaml(pkcs11Config *pkcs11.Pkcs11Config, pkcs11Yaml...
FILE: vendor/github.com/containers/ocicrypt/config/keyprovider-config/config.go
type Command (line 27) | type Command struct
type KeyProviderAttrs (line 33) | type KeyProviderAttrs struct
type OcicryptConfig (line 39) | type OcicryptConfig struct
constant ENVVARNAME (line 43) | ENVVARNAME = "OCICRYPT_KEYPROVIDER_CONFIG"
function parseConfigFile (line 47) | func parseConfigFile(filename string) (*OcicryptConfig, error) {
function GetConfiguration (line 67) | func GetConfiguration() (*OcicryptConfig, error) {
FILE: vendor/github.com/containers/ocicrypt/config/pkcs11config/config.go
type OcicryptConfig (line 30) | type OcicryptConfig struct
constant CONFIGFILE (line 34) | CONFIGFILE = "ocicrypt.conf"
constant ENVVARNAME (line 35) | ENVVARNAME = "OCICRYPT_CONFIG"
function parseConfigFile (line 46) | func parseConfigFile(filename string) (*OcicryptConfig, error) {
function getConfiguration (line 70) | func getConfiguration() (*OcicryptConfig, error) {
function getDefaultCryptoConfigOpts (line 99) | func getDefaultCryptoConfigOpts() (*OcicryptConfig, error) {
function GetUserPkcs11Config (line 113) | func GetUserPkcs11Config() (*pkcs11.Pkcs11Config, error) {
FILE: vendor/github.com/containers/ocicrypt/crypto/pkcs11/common.go
type Pkcs11KeyFile (line 26) | type Pkcs11KeyFile struct
type Pkcs11KeyFileObject (line 36) | type Pkcs11KeyFileObject struct
function ParsePkcs11Uri (line 41) | func ParsePkcs11Uri(uri string) (*pkcs11uri.Pkcs11URI, error) {
function ParsePkcs11KeyFile (line 55) | func ParsePkcs11KeyFile(yamlstr []byte) (*Pkcs11KeyFileObject, error) {
function IsPkcs11PrivateKey (line 73) | func IsPkcs11PrivateKey(yamlstr []byte) bool {
function IsPkcs11PublicKey (line 79) | func IsPkcs11PublicKey(yamlstr []byte) bool {
type Pkcs11Config (line 90) | type Pkcs11Config struct
function GetDefaultModuleDirectories (line 97) | func GetDefaultModuleDirectories() []string {
function GetDefaultModuleDirectoriesYaml (line 115) | func GetDefaultModuleDirectoriesYaml(indent string) string {
function ParsePkcs11ConfigFile (line 126) | func ParsePkcs11ConfigFile(yamlstr []byte) (*Pkcs11Config, error) {
FILE: vendor/github.com/containers/ocicrypt/crypto/pkcs11/pkcs11helpers.go
function rsaPublicEncryptOAEP (line 64) | func rsaPublicEncryptOAEP(pubKey *rsa.PublicKey, plaintext []byte) ([]by...
function pkcs11UriGetLoginParameters (line 93) | func pkcs11UriGetLoginParameters(p11uri *pkcs11uri.Pkcs11URI, privateKey...
function pkcs11UriGetKeyIdAndLabel (line 131) | func pkcs11UriGetKeyIdAndLabel(p11uri *pkcs11uri.Pkcs11URI) (string, str...
function pkcs11OpenSession (line 141) | func pkcs11OpenSession(p11ctx *pkcs11.Ctx, slotid uint, pin string) (ses...
function pkcs11UriLogin (line 159) | func pkcs11UriLogin(p11uri *pkcs11uri.Pkcs11URI, privateKeyOperation boo...
function pkcs11Logout (line 210) | func pkcs11Logout(ctx *pkcs11.Ctx, session pkcs11.SessionHandle) {
function findObject (line 218) | func findObject(p11ctx *pkcs11.Ctx, session pkcs11.SessionHandle, class ...
function publicEncryptOAEP (line 258) | func publicEncryptOAEP(pubKey *Pkcs11KeyFileObject, plaintext []byte) ([...
function privateDecryptOAEP (line 310) | func privateDecryptOAEP(privKeyObj *Pkcs11KeyFileObject, ciphertext []by...
type Pkcs11Blob (line 361) | type Pkcs11Blob struct
type Pkcs11Recipient (line 367) | type Pkcs11Recipient struct
function EncryptMultiple (line 391) | func EncryptMultiple(pubKeys []interface{}, data []byte) ([]byte, error) {
function Decrypt (line 441) | func Decrypt(privKeyObjs []*Pkcs11KeyFileObject, pkcs11blobstr []byte) (...
FILE: vendor/github.com/containers/ocicrypt/crypto/pkcs11/pkcs11helpers_nocgo.go
function EncryptMultiple (line 24) | func EncryptMultiple(pubKeys []interface{}, data []byte) ([]byte, error) {
function Decrypt (line 28) | func Decrypt(privKeyObjs []*Pkcs11KeyFileObject, pkcs11blobstr []byte) (...
FILE: vendor/github.com/containers/ocicrypt/crypto/pkcs11/utils.go
function setEnvVars (line 34) | func setEnvVars(env map[string]string) ([]string, error) {
function arrayToMap (line 54) | func arrayToMap(elements []string) map[string]string {
function restoreEnv (line 69) | func restoreEnv(envs []string) {
function getHostAndOsType (line 91) | func getHostAndOsType() (string, string, string) {
FILE: vendor/github.com/containers/ocicrypt/encryption.go
type EncryptLayerFinalizer (line 43) | type EncryptLayerFinalizer
function init (line 45) | func init() {
function RegisterKeyWrapper (line 66) | func RegisterKeyWrapper(scheme string, iface keywrap.KeyWrapper) {
function GetKeyWrapper (line 72) | func GetKeyWrapper(scheme string) keywrap.KeyWrapper {
function GetWrappedKeysMap (line 78) | func GetWrappedKeysMap(desc ocispec.Descriptor) map[string]string {
function EncryptLayer (line 90) | func EncryptLayer(ec *config.EncryptConfig, encOrPlainLayerReader io.Rea...
function preWrapKeys (line 181) | func preWrapKeys(keywrapper keywrap.KeyWrapper, ec *config.EncryptConfig...
function DecryptLayer (line 196) | func DecryptLayer(dc *config.DecryptConfig, encLayerReader io.Reader, de...
function decryptLayerKeyOptsData (line 214) | func decryptLayerKeyOptsData(dc *config.DecryptConfig, desc ocispec.Desc...
function getLayerPubOpts (line 251) | func getLayerPubOpts(desc ocispec.Descriptor) ([]byte, error) {
function preUnwrapKey (line 262) | func preUnwrapKey(keywrapper keywrap.KeyWrapper, dc *config.DecryptConfi...
function commonEncryptLayer (line 285) | func commonEncryptLayer(plainLayerReader io.Reader, d digest.Digest, typ...
function commonDecryptLayer (line 310) | func commonDecryptLayer(encLayerReader io.Reader, privOptsData []byte, p...
function FilterOutAnnotations (line 345) | func FilterOutAnnotations(annotations map[string]string) map[string]stri...
FILE: vendor/github.com/containers/ocicrypt/gpg.go
type GPGVersion (line 35) | type GPGVersion
constant GPGv2 (line 39) | GPGv2 GPGVersion = iota
constant GPGv1 (line 41) | GPGv1
constant GPGVersionUndetermined (line 43) | GPGVersionUndetermined
type GPGClient (line 47) | type GPGClient interface
type gpgClient (line 61) | type gpgClient struct
type gpgv2Client (line 66) | type gpgv2Client struct
method GetGPGPrivateKey (line 126) | func (gc *gpgv2Client) GetGPGPrivateKey(keyid uint64, passphrase strin...
method ReadGPGPubRingFile (line 156) | func (gc *gpgv2Client) ReadGPGPubRingFile() ([]byte, error) {
method getKeyDetails (line 169) | func (gc *gpgv2Client) getKeyDetails(option string, keyid uint64) ([]b...
method GetSecretKeyDetails (line 185) | func (gc *gpgv2Client) GetSecretKeyDetails(keyid uint64) ([]byte, bool...
method GetKeyDetails (line 191) | func (gc *gpgv2Client) GetKeyDetails(keyid uint64) ([]byte, bool, erro...
method ResolveRecipients (line 196) | func (gc *gpgv2Client) ResolveRecipients(recipients []string) []string {
type gpgv1Client (line 71) | type gpgv1Client struct
method GetGPGPrivateKey (line 201) | func (gc *gpgv1Client) GetGPGPrivateKey(keyid uint64, _ string) ([]byt...
method ReadGPGPubRingFile (line 215) | func (gc *gpgv1Client) ReadGPGPubRingFile() ([]byte, error) {
method getKeyDetails (line 228) | func (gc *gpgv1Client) getKeyDetails(option string, keyid uint64) ([]b...
method GetSecretKeyDetails (line 245) | func (gc *gpgv1Client) GetSecretKeyDetails(keyid uint64) ([]byte, bool...
method GetKeyDetails (line 251) | func (gc *gpgv1Client) GetKeyDetails(keyid uint64) ([]byte, bool, erro...
method ResolveRecipients (line 256) | func (gc *gpgv1Client) ResolveRecipients(recipients []string) []string {
function GuessGPGVersion (line 77) | func GuessGPGVersion() GPGVersion {
function NewGPGClient (line 88) | func NewGPGClient(gpgVersion, gpgHomeDir string) (GPGClient, error) {
function newGPGClient (line 101) | func newGPGClient(version *GPGVersion, homedir string) (GPGClient, error) {
function runGPGGetOutput (line 262) | func runGPGGetOutput(cmd *exec.Cmd) ([]byte, error) {
function resolveRecipients (line 289) | func resolveRecipients(gc GPGClient, recipients []string) []string {
function extractEmailFromDetails (line 318) | func extractEmailFromDetails(details []byte) string {
function uint64ToStringArray (line 331) | func uint64ToStringArray(format string, in []uint64) []string {
function GPGGetPrivateKey (line 345) | func GPGGetPrivateKey(descs []ocispec.Descriptor, gpgClient GPGClient, g...
FILE: vendor/github.com/containers/ocicrypt/gpgvault.go
type GPGVault (line 29) | type GPGVault interface
type gpgVault (line 41) | type gpgVault struct
method AddSecretKeyRingData (line 53) | func (g *gpgVault) AddSecretKeyRingData(gpgSecretKeyRingData []byte) e...
method AddSecretKeyRingDataArray (line 67) | func (g *gpgVault) AddSecretKeyRingDataArray(gpgSecretKeyRingDataArray...
method AddSecretKeyRingFiles (line 77) | func (g *gpgVault) AddSecretKeyRingFiles(filenames []string) error {
method GetGPGPrivateKey (line 92) | func (g *gpgVault) GetGPGPrivateKey(keyid uint64) ([]openpgp.Key, []by...
function NewGPGVault (line 47) | func NewGPGVault() GPGVault {
FILE: vendor/github.com/containers/ocicrypt/helpers/parse_helpers.go
function processRecipientKeys (line 19) | func processRecipientKeys(recipients []string) ([][]byte, [][]byte, [][]...
function processx509Certs (line 87) | func processx509Certs(keys []string) ([][]byte, error) {
function processPwdString (line 112) | func processPwdString(pwdString string) ([]byte, error) {
function processPrivateKeyFiles (line 147) | func processPrivateKeyFiles(keyFilesAndPwds []string) ([][]byte, [][]byt...
function CreateDecryptCryptoConfig (line 203) | func CreateDecryptCryptoConfig(keys []string, decRecipients []string) (e...
function CreateCryptoConfig (line 296) | func CreateCryptoConfig(recipients []string, keys []string) (encconfig.C...
FILE: vendor/github.com/containers/ocicrypt/keywrap/jwe/keywrapper_jwe.go
type jweKeyWrapper (line 30) | type jweKeyWrapper struct
method GetAnnotationID (line 33) | func (kw *jweKeyWrapper) GetAnnotationID() string {
method WrapKeys (line 44) | func (kw *jweKeyWrapper) WrapKeys(ec *config.EncryptConfig, optsData [...
method UnwrapKey (line 67) | func (kw *jweKeyWrapper) UnwrapKey(dc *config.DecryptConfig, jweString...
method NoPossibleKeys (line 99) | func (kw *jweKeyWrapper) NoPossibleKeys(dcparameters map[string][][]by...
method GetPrivateKeys (line 103) | func (kw *jweKeyWrapper) GetPrivateKeys(dcparameters map[string][][]by...
method getPrivateKeysPasswords (line 107) | func (kw *jweKeyWrapper) getPrivateKeysPasswords(dcparameters map[stri...
method GetKeyIdsFromPacket (line 111) | func (kw *jweKeyWrapper) GetKeyIdsFromPacket(b64jwes string) ([]uint64...
method GetRecipients (line 115) | func (kw *jweKeyWrapper) GetRecipients(b64jwes string) ([]string, erro...
function NewKeyWrapper (line 38) | func NewKeyWrapper() keywrap.KeyWrapper {
function addPubKeys (line 119) | func addPubKeys(joseRecipients *[]jose.Recipient, pubKeys [][]byte) error {
FILE: vendor/github.com/containers/ocicrypt/keywrap/keyprovider/keyprovider.go
type keyProviderKeyWrapper (line 34) | type keyProviderKeyWrapper struct
method GetAnnotationID (line 39) | func (kw *keyProviderKeyWrapper) GetAnnotationID() string {
method WrapKeys (line 99) | func (kw *keyProviderKeyWrapper) WrapKeys(ec *config.EncryptConfig, op...
method UnwrapKey (line 136) | func (kw *keyProviderKeyWrapper) UnwrapKey(dc *config.DecryptConfig, j...
method NoPossibleKeys (line 225) | func (kw *keyProviderKeyWrapper) NoPossibleKeys(dcparameters map[strin...
method GetPrivateKeys (line 230) | func (kw *keyProviderKeyWrapper) GetPrivateKeys(dcparameters map[strin...
method GetKeyIdsFromPacket (line 235) | func (kw *keyProviderKeyWrapper) GetKeyIdsFromPacket(_ string) ([]uint...
method GetRecipients (line 240) | func (kw *keyProviderKeyWrapper) GetRecipients(_ string) ([]string, er...
function NewKeyWrapper (line 44) | func NewKeyWrapper(p string, a keyproviderconfig.KeyProviderAttrs) keywr...
type KeyProviderKeyWrapProtocolOperation (line 48) | type KeyProviderKeyWrapProtocolOperation
type KeyProviderKeyWrapProtocolInput (line 56) | type KeyProviderKeyWrapProtocolInput struct
type KeyProviderKeyWrapProtocolOutput (line 66) | type KeyProviderKeyWrapProtocolOutput struct
type KeyWrapParams (line 73) | type KeyWrapParams struct
type KeyUnwrapParams (line 78) | type KeyUnwrapParams struct
type KeyUnwrapResults (line 83) | type KeyUnwrapResults struct
type KeyWrapResults (line 87) | type KeyWrapResults struct
function init (line 93) | func init() {
function getProviderGRPCOutput (line 168) | func getProviderGRPCOutput(input []byte, connString string, operation Ke...
function getProviderCommandOutput (line 210) | func getProviderCommandOutput(input []byte, command *keyproviderconfig.C...
FILE: vendor/github.com/containers/ocicrypt/keywrap/keywrap.go
type KeyWrapper (line 25) | type KeyWrapper interface
FILE: vendor/github.com/containers/ocicrypt/keywrap/pgp/keywrapper_gpg.go
type gpgKeyWrapper (line 37) | type gpgKeyWrapper struct
method GetAnnotationID (line 56) | func (kw *gpgKeyWrapper) GetAnnotationID() string {
method WrapKeys (line 62) | func (kw *gpgKeyWrapper) WrapKeys(ec *config.EncryptConfig, optsData [...
method UnwrapKey (line 92) | func (kw *gpgKeyWrapper) UnwrapKey(dc *config.DecryptConfig, pgpPacket...
method GetKeyIdsFromPacket (line 138) | func (kw *gpgKeyWrapper) GetKeyIdsFromPacket(b64pgpPackets string) ([]...
method getKeyIDs (line 156) | func (kw *gpgKeyWrapper) getKeyIDs(pgpPacket []byte) ([]uint64, error) {
method GetRecipients (line 181) | func (kw *gpgKeyWrapper) GetRecipients(b64pgpPackets string) ([]string...
method NoPossibleKeys (line 193) | func (kw *gpgKeyWrapper) NoPossibleKeys(dcparameters map[string][][]by...
method GetPrivateKeys (line 197) | func (kw *gpgKeyWrapper) GetPrivateKeys(dcparameters map[string][][]by...
method getKeyParameters (line 201) | func (kw *gpgKeyWrapper) getKeyParameters(dcparameters map[string][][]...
method createEntityList (line 213) | func (kw *gpgKeyWrapper) createEntityList(ec *config.EncryptConfig) (o...
function NewKeyWrapper (line 41) | func NewKeyWrapper() keywrap.KeyWrapper {
FILE: vendor/github.com/containers/ocicrypt/keywrap/pkcs11/keywrapper_pkcs11.go
type pkcs11KeyWrapper (line 29) | type pkcs11KeyWrapper struct
method GetAnnotationID (line 32) | func (kw *pkcs11KeyWrapper) GetAnnotationID() string {
method WrapKeys (line 43) | func (kw *pkcs11KeyWrapper) WrapKeys(ec *config.EncryptConfig, optsDat...
method UnwrapKey (line 64) | func (kw *pkcs11KeyWrapper) UnwrapKey(dc *config.DecryptConfig, jsonSt...
method NoPossibleKeys (line 102) | func (kw *pkcs11KeyWrapper) NoPossibleKeys(dcparameters map[string][][...
method GetPrivateKeys (line 106) | func (kw *pkcs11KeyWrapper) GetPrivateKeys(dcparameters map[string][][...
method GetKeyIdsFromPacket (line 110) | func (kw *pkcs11KeyWrapper) GetKeyIdsFromPacket(_ string) ([]uint64, e...
method GetRecipients (line 114) | func (kw *pkcs11KeyWrapper) GetRecipients(_ string) ([]string, error) {
function NewKeyWrapper (line 37) | func NewKeyWrapper() keywrap.KeyWrapper {
function addPubKeys (line 118) | func addPubKeys(dc *config.DecryptConfig, pubKeys [][]byte) ([]interface...
function p11confFromParameters (line 147) | func p11confFromParameters(dcparameters map[string][][]byte) (*pkcs11.Pk...
FILE: vendor/github.com/containers/ocicrypt/keywrap/pkcs7/keywrapper_pkcs7.go
type pkcs7KeyWrapper (line 31) | type pkcs7KeyWrapper struct
method GetAnnotationID (line 39) | func (kw *pkcs7KeyWrapper) GetAnnotationID() string {
method WrapKeys (line 45) | func (kw *pkcs7KeyWrapper) WrapKeys(ec *config.EncryptConfig, optsData...
method NoPossibleKeys (line 74) | func (kw *pkcs7KeyWrapper) NoPossibleKeys(dcparameters map[string][][]...
method GetPrivateKeys (line 78) | func (kw *pkcs7KeyWrapper) GetPrivateKeys(dcparameters map[string][][]...
method getPrivateKeysPasswords (line 82) | func (kw *pkcs7KeyWrapper) getPrivateKeysPasswords(dcparameters map[st...
method UnwrapKey (line 88) | func (kw *pkcs7KeyWrapper) UnwrapKey(dc *config.DecryptConfig, pkcs7Pa...
method GetKeyIdsFromPacket (line 129) | func (kw *pkcs7KeyWrapper) GetKeyIdsFromPacket(b64pkcs7Packets string)...
method GetRecipients (line 135) | func (kw *pkcs7KeyWrapper) GetRecipients(b64pkcs7Packets string) ([]st...
function NewKeyWrapper (line 35) | func NewKeyWrapper() keywrap.KeyWrapper {
function collectX509s (line 59) | func collectX509s(x509s [][]byte) ([]*x509.Certificate, error) {
FILE: vendor/github.com/containers/ocicrypt/reader.go
type readerAtReader (line 23) | type readerAtReader struct
method Read (line 36) | func (rar *readerAtReader) Read(p []byte) (n int, err error) {
function ReaderFromReaderAt (line 29) | func ReaderFromReaderAt(r io.ReaderAt) io.Reader {
FILE: vendor/github.com/containers/ocicrypt/spec/spec.go
constant MediaTypeLayerEnc (line 5) | MediaTypeLayerEnc = "application/vnd.oci.image.layer.v1.tar+encrypted"
constant MediaTypeLayerGzipEnc (line 7) | MediaTypeLayerGzipEnc = "application/vnd.oci.image.layer.v1.tar+gzip+enc...
constant MediaTypeLayerZstdEnc (line 9) | MediaTypeLayerZstdEnc = "application/vnd.oci.image.layer.v1.tar+zstd+enc...
constant MediaTypeLayerNonDistributableEnc (line 11) | MediaTypeLayerNonDistributableEnc = "application/vnd.oci.image.layer.non...
constant MediaTypeLayerNonDistributableGzipEnc (line 13) | MediaTypeLayerNonDistributableGzipEnc = "application/vnd.oci.image.layer...
constant MediaTypeLayerNonDistributableZstdEnc (line 15) | MediaTypeLayerNonDistributableZstdEnc = "application/vnd.oci.image.layer...
constant MediaTypeLayerNonDistributableZsdtEnc (line 19) | MediaTypeLayerNonDistributableZsdtEnc = MediaTypeLayerNonDistributableZs...
FILE: vendor/github.com/containers/ocicrypt/utils/delayedreader.go
function min (line 23) | func min(a, b int) int {
type DelayedReader (line 34) | type DelayedReader struct
method Read (line 51) | func (dr *DelayedReader) Read(p []byte) (int, error) {
function NewDelayedReader (line 43) | func NewDelayedReader(reader io.Reader, bufsize uint) io.Reader {
FILE: vendor/github.com/containers/ocicrypt/utils/ioutils.go
function FillBuffer (line 28) | func FillBuffer(reader io.Reader, buffer []byte) (int, error) {
type CommandExecuter (line 38) | type CommandExecuter interface
type Runner (line 42) | type Runner struct
method Exec (line 45) | func (r Runner) Exec(cmdName string, args []string, input []byte) ([]b...
FILE: vendor/github.com/containers/ocicrypt/utils/keyprovider/keyprovider.pb.go
constant _ (line 25) | _ = proto.ProtoPackageIsVersion3
type KeyProviderKeyWrapProtocolInput (line 27) | type KeyProviderKeyWrapProtocolInput struct
method Reset (line 34) | func (m *KeyProviderKeyWrapProtocolInput) Reset() { *m = KeyPr...
method String (line 35) | func (m *KeyProviderKeyWrapProtocolInput) String() string { return pro...
method ProtoMessage (line 36) | func (*KeyProviderKeyWrapProtocolInput) ProtoMessage() {}
method Descriptor (line 37) | func (*KeyProviderKeyWrapProtocolInput) Descriptor() ([]byte, []int) {
method XXX_Unmarshal (line 41) | func (m *KeyProviderKeyWrapProtocolInput) XXX_Unmarshal(b []byte) error {
method XXX_Marshal (line 44) | func (m *KeyProviderKeyWrapProtocolInput) XXX_Marshal(b []byte, determ...
method XXX_Merge (line 47) | func (m *KeyProviderKeyWrapProtocolInput) XXX_Merge(src proto.Message) {
method XXX_Size (line 50) | func (m *KeyProviderKeyWrapProtocolInput) XXX_Size() int {
method XXX_DiscardUnknown (line 53) | func (m *KeyProviderKeyWrapProtocolInput) XXX_DiscardUnknown() {
method GetKeyProviderKeyWrapProtocolInput (line 59) | func (m *KeyProviderKeyWrapProtocolInput) GetKeyProviderKeyWrapProtoco...
type KeyProviderKeyWrapProtocolOutput (line 66) | type KeyProviderKeyWrapProtocolOutput struct
method Reset (line 73) | func (m *KeyProviderKeyWrapProtocolOutput) Reset() { *m = KeyP...
method String (line 74) | func (m *KeyProviderKeyWrapProtocolOutput) String() string { return pr...
method ProtoMessage (line 75) | func (*KeyProviderKeyWrapProtocolOutput) ProtoMessage() {}
method Descriptor (line 76) | func (*KeyProviderKeyWrapProtocolOutput) Descriptor() ([]byte, []int) {
method XXX_Unmarshal (line 80) | func (m *KeyProviderKeyWrapProtocolOutput) XXX_Unmarshal(b []byte) err...
method XXX_Marshal (line 83) | func (m *KeyProviderKeyWrapProtocolOutput) XXX_Marshal(b []byte, deter...
method XXX_Merge (line 86) | func (m *KeyProviderKeyWrapProtocolOutput) XXX_Merge(src proto.Message) {
method XXX_Size (line 89) | func (m *KeyProviderKeyWrapProtocolOutput) XXX_Size() int {
method XXX_DiscardUnknown (line 92) | func (m *KeyProviderKeyWrapProtocolOutput) XXX_DiscardUnknown() {
method GetKeyProviderKeyWrapProtocolOutput (line 98) | func (m *KeyProviderKeyWrapProtocolOutput) GetKeyProviderKeyWrapProtoc...
function init (line 105) | func init() {
function init (line 110) | func init() {
constant _ (line 135) | _ = grpc.SupportPackageIsVersion6
type KeyProviderServiceClient (line 140) | type KeyProviderServiceClient interface
type keyProviderServiceClient (line 145) | type keyProviderServiceClient struct
method WrapKey (line 153) | func (c *keyProviderServiceClient) WrapKey(ctx context.Context, in *Ke...
method UnWrapKey (line 162) | func (c *keyProviderServiceClient) UnWrapKey(ctx context.Context, in *...
function NewKeyProviderServiceClient (line 149) | func NewKeyProviderServiceClient(cc grpc.ClientConnInterface) KeyProvide...
type KeyProviderServiceServer (line 172) | type KeyProviderServiceServer interface
type UnimplementedKeyProviderServiceServer (line 178) | type UnimplementedKeyProviderServiceServer struct
method WrapKey (line 181) | func (*UnimplementedKeyProviderServiceServer) WrapKey(ctx context.Cont...
method UnWrapKey (line 184) | func (*UnimplementedKeyProviderServiceServer) UnWrapKey(ctx context.Co...
function RegisterKeyProviderServiceServer (line 188) | func RegisterKeyProviderServiceServer(s *grpc.Server, srv KeyProviderSer...
function _KeyProviderService_WrapKey_Handler (line 192) | func _KeyProviderService_WrapKey_Handler(srv interface{}, ctx context.Co...
function _KeyProviderService_UnWrapKey_Handler (line 210) | func _KeyProviderService_UnWrapKey_Handler(srv interface{}, ctx context....
FILE: vendor/github.com/containers/ocicrypt/utils/testing.go
function CreateRSAKey (line 33) | func CreateRSAKey(bits int) (*rsa.PrivateKey, error) {
function CreateECDSAKey (line 42) | func CreateECDSAKey(curve elliptic.Curve) (*ecdsa.PrivateKey, error) {
function CreateRSATestKey (line 52) | func CreateRSATestKey(bits int, password []byte, pemencode bool) ([]byte...
function CreateECDSATestKey (line 96) | func CreateECDSATestKey(curve elliptic.Curve) ([]byte, []byte, error) {
function CreateTestCA (line 116) | func CreateTestCA() (*rsa.PrivateKey, *x509.Certificate, error) {
function CertifyKey (line 140) | func CertifyKey(pubbytes []byte, template *x509.Certificate, caKey *rsa....
function certifyKey (line 148) | func certifyKey(pub interface{}, template *x509.Certificate, caKey *rsa....
FILE: vendor/github.com/containers/ocicrypt/utils/utils.go
function parseJWKPrivateKey (line 34) | func parseJWKPrivateKey(privKey []byte, prefix string) (interface{}, err...
function parseJWKPublicKey (line 47) | func parseJWKPublicKey(privKey []byte, prefix string) (interface{}, erro...
function parsePkcs11PrivateKeyYaml (line 60) | func parsePkcs11PrivateKeyYaml(yaml []byte, prefix string) (*pkcs11.Pkcs...
function parsePkcs11PublicKeyYaml (line 66) | func parsePkcs11PublicKeyYaml(yaml []byte, prefix string) (*pkcs11.Pkcs1...
function IsPasswordError (line 73) | func IsPasswordError(err error) bool {
function ParsePrivateKey (line 85) | func ParsePrivateKey(privKey, privKeyPassword []byte, prefix string) (in...
function IsPrivateKey (line 128) | func IsPrivateKey(data []byte, password []byte) (bool, error) {
function IsPkcs11PrivateKey (line 134) | func IsPkcs11PrivateKey(data []byte) bool {
function ParsePublicKey (line 140) | func ParsePublicKey(pubKey []byte, prefix string) (interface{}, error) {
function IsPublicKey (line 160) | func IsPublicKey(data []byte) bool {
function IsPkcs11PublicKey (line 166) | func IsPkcs11PublicKey(data []byte) bool {
function ParseCertificate (line 172) | func ParseCertificate(certBytes []byte, prefix string) (*x509.Certificat...
function IsCertificate (line 188) | func IsCertificate(data []byte) bool {
function IsGPGPrivateKeyRing (line 194) | func IsGPGPrivateKeyRing(data []byte) bool {
function SortDecryptionKeys (line 203) | func SortDecryptionKeys(b64ItemList string) (map[string][][]byte, error) {
FILE: vendor/github.com/coreos/go-oidc/v3/oidc/jose.go
constant RS256 (line 9) | RS256 = "RS256"
constant RS384 (line 10) | RS384 = "RS384"
constant RS512 (line 11) | RS512 = "RS512"
constant ES256 (line 12) | ES256 = "ES256"
constant ES384 (line 13) | ES384 = "ES384"
constant ES512 (line 14) | ES512 = "ES512"
constant PS256 (line 15) | PS256 = "PS256"
constant PS384 (line 16) | PS384 = "PS384"
constant PS512 (line 17) | PS512 = "PS512"
constant EdDSA (line 18) | EdDSA = "EdDSA"
FILE: vendor/github.com/coreos/go-oidc/v3/oidc/jwks.go
type StaticKeySet (line 19) | type StaticKeySet struct
method VerifySignature (line 26) | func (s *StaticKeySet) VerifySignature(ctx context.Context, jwt string...
function NewRemoteKeySet (line 58) | func NewRemoteKeySet(ctx context.Context, jwksURL string) *RemoteKeySet {
function newRemoteKeySet (line 62) | func newRemoteKeySet(ctx context.Context, jwksURL string) *RemoteKeySet {
type RemoteKeySet (line 77) | type RemoteKeySet struct
method VerifySignature (line 135) | func (r *RemoteKeySet) VerifySignature(ctx context.Context, jwt string...
method verify (line 152) | func (r *RemoteKeySet) verify(ctx context.Context, jws *jose.JSONWebSi...
method keysFromCache (line 188) | func (r *RemoteKeySet) keysFromCache() (keys []jose.JSONWebKey) {
method keysFromRemote (line 196) | func (r *RemoteKeySet) keysFromRemote(ctx context.Context) ([]jose.JSO...
method updateKeys (line 236) | func (r *RemoteKeySet) updateKeys() ([]jose.JSONWebKey, error) {
type inflight (line 95) | type inflight struct
method wait (line 108) | func (i *inflight) wait() <-chan struct{} {
method done (line 115) | func (i *inflight) done(keys []jose.JSONWebKey, err error) {
method result (line 122) | func (i *inflight) result() ([]jose.JSONWebKey, error) {
function newInflight (line 102) | func newInflight() *inflight {
FILE: vendor/github.com/coreos/go-oidc/v3/oidc/oidc.go
constant ScopeOpenID (line 25) | ScopeOpenID = "openid"
constant ScopeOfflineAccess (line 35) | ScopeOfflineAccess = "offline_access"
type contextKey (line 43) | type contextKey
function ClientContext (line 57) | func ClientContext(ctx context.Context, client *http.Client) context.Con...
function getClient (line 61) | func getClient(ctx context.Context) *http.Client {
function InsecureIssuerURLContext (line 83) | func InsecureIssuerURLContext(ctx context.Context, issuerURL string) con...
function doRequest (line 87) | func doRequest(ctx context.Context, req *http.Request) (*http.Response, ...
type Provider (line 96) | type Provider struct
method remoteKeySet (line 118) | func (p *Provider) remoteKeySet() KeySet {
method Claims (line 304) | func (p *Provider) Claims(v interface{}) error {
method Endpoint (line 312) | func (p *Provider) Endpoint() oauth2.Endpoint {
method UserInfoEndpoint (line 318) | func (p *Provider) UserInfoEndpoint() string {
method UserInfo (line 351) | func (p *Provider) UserInfo(ctx context.Context, tokenSource oauth2.To...
type providerJSON (line 131) | type providerJSON struct
type ProviderConfig (line 181) | type ProviderConfig struct
method NewProvider (line 216) | func (p *ProviderConfig) NewProvider(ctx context.Context) *Provider {
function NewProvider (line 238) | func NewProvider(ctx context.Context, issuer string) (*Provider, error) {
type UserInfo (line 323) | type UserInfo struct
method Claims (line 343) | func (u *UserInfo) Claims(v interface{}) error {
type userInfoRaw (line 332) | type userInfoRaw struct
type IDToken (line 408) | type IDToken struct
method Claims (line 468) | func (i *IDToken) Claims(v interface{}) error {
method VerifyAccessToken (line 479) | func (i *IDToken) VerifyAccessToken(accessToken string) error {
type idToken (line 503) | type idToken struct
type claimSource (line 516) | type claimSource struct
type stringAsBool (line 521) | type stringAsBool
method UnmarshalJSON (line 523) | func (sb *stringAsBool) UnmarshalJSON(b []byte) error {
type audience (line 535) | type audience
method UnmarshalJSON (line 537) | func (a *audience) UnmarshalJSON(b []byte) error {
type jsonTime (line 551) | type jsonTime
method UnmarshalJSON (line 553) | func (j *jsonTime) UnmarshalJSON(b []byte) error {
function unmarshalResp (line 573) | func unmarshalResp(r *http.Response, body []byte, v interface{}) error {
FILE: vendor/github.com/coreos/go-oidc/v3/oidc/verify.go
constant issuerGoogleAccounts (line 16) | issuerGoogleAccounts = "https://accounts.google.com"
constant issuerGoogleAccountsNoScheme (line 17) | issuerGoogleAccountsNoScheme = "accounts.google.com"
type TokenExpiredError (line 23) | type TokenExpiredError struct
method Error (line 28) | func (e *TokenExpiredError) Error() string {
type KeySet (line 35) | type KeySet interface
type IDTokenVerifier (line 48) | type IDTokenVerifier struct
method Verify (line 205) | func (v *IDTokenVerifier) Verify(ctx context.Context, rawIDToken strin...
function NewVerifier (line 70) | func NewVerifier(issuerURL string, keySet KeySet, config *Config) *IDTok...
type Config (line 75) | type Config struct
method VerifierContext (line 121) | func (p *Provider) VerifierContext(ctx context.Context, config *Config) ...
method Verifier (line 129) | func (p *Provider) Verifier(config *Config) *IDTokenVerifier {
method newVerifier (line 133) | func (p *Provider) newVerifier(keySet KeySet, config *Config) *IDTokenVe...
function contains (line 144) | func contains(sli []string, ele string) bool {
function resolveDistributedClaim (line 154) | func resolveDistributedClaim(ctx context.Context, verifier *IDTokenVerif...
function Nonce (line 336) | func Nonce(nonce string) oauth2.AuthCodeOption {
FILE: vendor/github.com/cyberphone/json-canonicalization/go/src/webpki.org/jsoncanonicalizer/es6numfmt.go
constant invalidPattern (line 31) | invalidPattern uint64 = 0x7ff0000000000000
function NumberToJSON (line 33) | func NumberToJSON(ieeeF64 float64) (res string, err error) {
FILE: vendor/github.com/cyberphone/json-canonicalization/go/src/webpki.org/jsoncanonicalizer/jsoncanonicalizer.go
type nameValueType (line 31) | type nameValueType struct
function Transform (line 44) | func Transform(jsonData []byte) (result []byte, e error) {
FILE: vendor/github.com/cyphar/filepath-securejoin/internal/consts/consts.go
constant MaxSymlinkLimit (line 15) | MaxSymlinkLimit = 255
FILE: vendor/github.com/cyphar/filepath-securejoin/join.go
function IsNotExist (line 23) | func IsNotExist(err error) bool {
function stripVolume (line 36) | func stripVolume(path string) string {
function hasDotDot (line 42) | func hasDotDot(path string) bool {
function SecureJoinVFS (line 84) | fun
Copy disabled (too large)
Download .json
Condensed preview — 3210 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (41,381K chars).
[
{
"path": ".cirrus.yml",
"chars": 9723,
"preview": "---\n\n# Main collection of env. vars to set for all tasks and scripts.\nenv:\n ####\n #### Global variables used for a"
},
{
"path": ".fmf/version",
"chars": 2,
"preview": "1\n"
},
{
"path": ".github/renovate.json5",
"chars": 1832,
"preview": "/*\n Renovate is a service similar to GitHub Dependabot, but with\n (fantastically) more configuration options. So ma"
},
{
"path": ".github/workflows/check_cirrus_cron.yml",
"chars": 971,
"preview": "---\n\n# See also:\n# https://github.com/containers/podman/blob/main/.github/workflows/check_cirrus_cron.yml\n\non:\n # Note:"
},
{
"path": ".github/workflows/issue_pr_lock.yml",
"chars": 525,
"preview": "---\n\n# See also:\n# https://github.com/containers/podman/blob/main/.github/workflows/issue_pr_lock.yml\n\non:\n schedule:\n "
},
{
"path": ".github/workflows/stale.yml",
"chars": 888,
"preview": "name: Mark stale issues and pull requests\n\n# Please refer to https://github.com/actions/stale/blob/master/action.yml\n# t"
},
{
"path": ".gitignore",
"chars": 128,
"preview": "*.1\n/layers-*\n/skopeo\nresult\n/completions/\n# ignore JetBrains IDEs (GoLand) config folder\n.idea\n\n# Ignore the bin direct"
},
{
"path": ".golangci.yml",
"chars": 427,
"preview": "version: \"2\"\n\nformatters:\n enable:\n - gofumpt\n\nlinters:\n settings:\n staticcheck:\n checks:\n # Compare"
},
{
"path": ".packit.yaml",
"chars": 4609,
"preview": "---\n# See the documentation for more information:\n# https://packit.dev/docs/configuration/\n\n# NOTE: The Packit copr_buil"
},
{
"path": "CODE-OF-CONDUCT.md",
"chars": 205,
"preview": "## The skopeo Project Community Code of Conduct\n\nThe skopeo project, as part of Podman Container Tools, follows the [CNC"
},
{
"path": "CONTRIBUTING.md",
"chars": 8321,
"preview": "# Contributing to Skopeo\n\nWe'd love to have you join the community! Below summarizes the processes\nthat we follow.\n\n## T"
},
{
"path": "GOVERNANCE.md",
"chars": 1525,
"preview": "## The Skopeo Project Community Governance\n\nThe Skopeo project, as part of Podman Container Tools, follows the [Podman P"
},
{
"path": "LICENSE",
"chars": 10728,
"preview": "\n Apache License\n Version 2.0, January 2004\n "
},
{
"path": "MAINTAINERS.md",
"chars": 3279,
"preview": "# Skopeo Maintainers\n\n[GOVERNANCE.md](https://github.com/containers/podman/blob/main/GOVERNANCE.md)\ndescribes the projec"
},
{
"path": "Makefile",
"chars": 11398,
"preview": ".PHONY: all binary docs docs-in-container build-local clean install install-binary install-completions shell test-integr"
},
{
"path": "OWNERS",
"chars": 281,
"preview": "approvers:\n - baude\n - giuseppe\n - lsm5\n - Luap99\n - mheon\n - mtrmac\n - nalind\n - rhatdan\n - TomSweeneyRedHat\nr"
},
{
"path": "README.md",
"chars": 12048,
"preview": "<p align=\"center\">\n <img src=\"https://cdn.rawgit.com/containers/skopeo/main/docs/skopeo.svg\" width=\"250\" alt=\"Skopeo\">"
},
{
"path": "ROADMAP.md",
"chars": 760,
"preview": "# Skopeo Roadmap\n\nSkopeo intends to mostly continue to be a very thin CLI wrapper over the [https://github.com/container"
},
{
"path": "SECURITY.md",
"chars": 235,
"preview": "## Security and Disclosure Information Policy for the skopeo Project\n\nThe skopeo Project follows the [Security and Discl"
},
{
"path": "cmd/skopeo/completions.go",
"chars": 2345,
"preview": "package main\n\nimport (\n\t\"strings\"\n\n\t\"github.com/spf13/cobra\"\n\t\"go.podman.io/image/v5/directory\"\n\t\"go.podman.io/image/v5/"
},
{
"path": "cmd/skopeo/copy.go",
"chars": 10183,
"preview": "package main\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"strings\"\n\n\tencconfig \"github.com/containers/ocicrypt/config\"\n\tench"
},
{
"path": "cmd/skopeo/copy_test.go",
"chars": 425,
"preview": "package main\n\nimport \"testing\"\n\nfunc TestCopy(t *testing.T) {\n\t// Invalid command-line arguments\n\tfor _, args := range ["
},
{
"path": "cmd/skopeo/delete.go",
"chars": 1895,
"preview": "package main\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"strings\"\n\n\t\"github.com/spf13/cobra\"\n\t\"go.podman.io/common/pkg/retry\"\n\t\"g"
},
{
"path": "cmd/skopeo/fixtures/.gitignore",
"chars": 59,
"preview": "/*.gpg~\n/.gpg-v21-migrated\n/private-keys-v1.d\n/random_seed\n"
},
{
"path": "cmd/skopeo/fixtures/empty.passphrase",
"chars": 0,
"preview": ""
},
{
"path": "cmd/skopeo/fixtures/image.manifest.json",
"chars": 995,
"preview": "{\n \"schemaVersion\": 2,\n \"mediaType\": \"application/vnd.docker.distribution.manifest.v2+json\",\n \"config\": {\n "
},
{
"path": "cmd/skopeo/fixtures/v2s1-invalid-signatures.manifest.json",
"chars": 166,
"preview": "{\n \"schemaVersion\": 1,\n \"name\": \"mitr/buxybox\",\n \"tag\": \"latest\",\n \"architecture\": \"amd64\",\n \"fsLayers\": [\n "
},
{
"path": "cmd/skopeo/generate_sigstore_key.go",
"chars": 2607,
"preview": "package main\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"io/fs\"\n\t\"os\"\n\n\t\"github.com/spf13/cobra\"\n\t\"go.podman.io/image/v5/pkg/cli\""
},
{
"path": "cmd/skopeo/generate_sigstore_key_test.go",
"chars": 2719,
"preview": "package main\n\nimport (\n\t\"os\"\n\t\"path/filepath\"\n\t\"testing\"\n\n\t\"github.com/stretchr/testify/assert\"\n\t\"github.com/stretchr/te"
},
{
"path": "cmd/skopeo/inspect/output.go",
"chars": 613,
"preview": "package inspect\n\nimport (\n\t\"time\"\n\n\tdigest \"github.com/opencontainers/go-digest\"\n\t\"go.podman.io/image/v5/types\"\n)\n\n// Ou"
},
{
"path": "cmd/skopeo/inspect.go",
"chars": 9204,
"preview": "package main\n\nimport (\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"strings\"\n\n\t\"github.com/containers/skopeo/cmd/skopeo/ins"
},
{
"path": "cmd/skopeo/layers.go",
"chars": 4707,
"preview": "package main\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"strings\"\n\n\t\"github.com/opencontainers/go-digest\"\n\t\"github.com/spf1"
},
{
"path": "cmd/skopeo/list_tags.go",
"chars": 6026,
"preview": "package main\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"maps\"\n\t\"slices\"\n\t\"strings\"\n\n\t\"github.com/spf"
},
{
"path": "cmd/skopeo/list_tags_test.go",
"chars": 2738,
"preview": "package main\n\nimport (\n\t\"testing\"\n\n\t\"github.com/stretchr/testify/assert\"\n\t\"github.com/stretchr/testify/require\"\n\t\"go.pod"
},
{
"path": "cmd/skopeo/login.go",
"chars": 1385,
"preview": "package main\n\nimport (\n\t\"io\"\n\t\"os\"\n\n\t\"github.com/spf13/cobra\"\n\t\"go.podman.io/common/pkg/auth\"\n\tcommonFlag \"go.podman.io/"
},
{
"path": "cmd/skopeo/login_test.go",
"chars": 651,
"preview": "package main\n\nimport (\n\t\"path/filepath\"\n\t\"testing\"\n)\n\nfunc TestLogin(t *testing.T) {\n\tdir := t.TempDir()\n\tauthFile := fi"
},
{
"path": "cmd/skopeo/logout.go",
"chars": 1291,
"preview": "package main\n\nimport (\n\t\"io\"\n\n\t\"github.com/spf13/cobra\"\n\t\"go.podman.io/common/pkg/auth\"\n\tcommonFlag \"go.podman.io/common"
},
{
"path": "cmd/skopeo/logout_test.go",
"chars": 858,
"preview": "package main\n\nimport (\n\t\"os\"\n\t\"path/filepath\"\n\t\"testing\"\n\n\t\"github.com/stretchr/testify/require\"\n)\n\nfunc TestLogout(t *t"
},
{
"path": "cmd/skopeo/main.go",
"chars": 10230,
"preview": "package main\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"runtime/debug\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/containers/skopeo/version\"\n\t\""
},
{
"path": "cmd/skopeo/main_test.go",
"chars": 1854,
"preview": "package main\n\nimport (\n\t\"bytes\"\n\t\"crypto/tls\"\n\t\"testing\"\n\n\t\"github.com/stretchr/testify/assert\"\n\t\"github.com/stretchr/te"
},
{
"path": "cmd/skopeo/manifest.go",
"chars": 959,
"preview": "package main\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\n\t\"github.com/spf13/cobra\"\n\t\"go.podman.io/image/v5/manifest\"\n)\n\ntype"
},
{
"path": "cmd/skopeo/manifest_test.go",
"chars": 831,
"preview": "package main\n\nimport (\n\t\"testing\"\n\n\t\"github.com/stretchr/testify/assert\"\n)\n\nfunc TestManifestDigest(t *testing.T) {\n\t// "
},
{
"path": "cmd/skopeo/proxy.go",
"chars": 1633,
"preview": "//go:build !windows\n\npackage main\n\n/*\n This command is still experimental. Documentation\n is available in\n docs-experime"
},
{
"path": "cmd/skopeo/proxy_windows.go",
"chars": 510,
"preview": "//go:build windows\n\npackage main\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\n\t\"github.com/spf13/cobra\"\n)\n\ntype proxyOptions struct {\n\tglobal"
},
{
"path": "cmd/skopeo/signing.go",
"chars": 6240,
"preview": "package main\n\nimport (\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"strings\"\n\n\t\"github.com/spf13/cobra\"\n\t\"go.podman.i"
},
{
"path": "cmd/skopeo/signing_test.go",
"chars": 7493,
"preview": "package main\n\nimport (\n\t\"encoding/json\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/opencontainers/go-digest"
},
{
"path": "cmd/skopeo/sync.go",
"chars": 26725,
"preview": "package main\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"io/fs\"\n\t\"os\"\n\t\"path\"\n\t\"path/filepath\"\n\t\"regexp\"\n\t\"slices\"\n\t\"s"
},
{
"path": "cmd/skopeo/sync_test.go",
"chars": 2926,
"preview": "package main\n\nimport (\n\t\"fmt\"\n\t\"testing\"\n\n\t\"github.com/stretchr/testify/assert\"\n\t\"github.com/stretchr/testify/require\"\n\t"
},
{
"path": "cmd/skopeo/unshare.go",
"chars": 100,
"preview": "//go:build !linux\n\npackage main\n\nfunc reexecIfNecessaryForImages(_ ...string) error {\n\treturn nil\n}\n"
},
{
"path": "cmd/skopeo/unshare_linux.go",
"chars": 1674,
"preview": "package main\n\nimport (\n\t\"fmt\"\n\t\"slices\"\n\n\t\"github.com/moby/sys/capability\"\n\t\"go.podman.io/image/v5/transports/alltranspo"
},
{
"path": "cmd/skopeo/utils.go",
"chars": 27524,
"preview": "package main\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"strings\"\n\t\"time\"\n\n\tdockerdistributionerrcode \"github.co"
},
{
"path": "cmd/skopeo/utils_nosequoia_test.go",
"chars": 83,
"preview": "//go:build !containers_image_sequoia\n\npackage main\n\nconst buildWithSequoia = false\n"
},
{
"path": "cmd/skopeo/utils_sequoia_test.go",
"chars": 81,
"preview": "//go:build containers_image_sequoia\n\npackage main\n\nconst buildWithSequoia = true\n"
},
{
"path": "cmd/skopeo/utils_test.go",
"chars": 20532,
"preview": "package main\n\nimport (\n\t\"bytes\"\n\t\"errors\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"testing\"\n\n\timgspecv1 \"github.com/opencontainers/image"
},
{
"path": "contrib/cirrus/mac_cleanup.sh",
"chars": 1680,
"preview": "#!/bin/bash\n\n# This script is intended to be called by Cirrus-CI on a Mac M1 persistent worker.\n# It performs a best-eff"
},
{
"path": "contrib/cirrus/ostree_ext.dockerfile",
"chars": 689,
"preview": "ARG BASE_FQIN=quay.io/coreos-assembler/fcos-buildroot:testing-devel\nFROM $BASE_FQIN\n\n# See 'Danger of using COPY and ADD"
},
{
"path": "contrib/cirrus/runner.sh",
"chars": 4503,
"preview": "#!/bin/bash\n\n# This script is intended to be executed by automation or humans\n# under a hack/get_ci_vm.sh context. Use "
},
{
"path": "contrib/skopeoimage/README.md",
"chars": 196,
"preview": "The skopeo container image build context and automation have been\nmoved to [https://github.com/containers/image_build/tr"
},
{
"path": "default-policy.json",
"chars": 256,
"preview": "{\n \"default\": [\n {\n \"type\": \"insecureAcceptAnything\"\n }\n ],\n \"transports\":\n {\n "
},
{
"path": "default.yaml",
"chars": 974,
"preview": "# This is a default registries.d configuration file. You may\n# add to this file or create additional files in registrie"
},
{
"path": "docs/skopeo-copy.1.md",
"chars": 11248,
"preview": "% skopeo-copy(1)\n\n## NAME\nskopeo\\-copy - Copy an image (manifest, filesystem layers, signatures) from one location to an"
},
{
"path": "docs/skopeo-delete.1.md",
"chars": 3551,
"preview": "% skopeo-delete(1)\n\n## NAME\nskopeo\\-delete - Mark the _image-name_ for later deletion by the registry's garbage collecto"
},
{
"path": "docs/skopeo-generate-sigstore-key.1.md",
"chars": 1242,
"preview": "% skopeo-generate-sigstore-key(1)\n\n## NAME\nskopeo\\-generate-sigstore-key - Generate a sigstore public/private key pair.\n"
},
{
"path": "docs/skopeo-inspect.1.md",
"chars": 6558,
"preview": "% skopeo-inspect(1)\n\n## NAME\nskopeo\\-inspect - Return low-level information about _image-name_ in a registry.\n\n## SYNOPS"
},
{
"path": "docs/skopeo-list-tags.1.md",
"chars": 4596,
"preview": "% skopeo-list-tags(1)\n\n## NAME\nskopeo\\-list\\-tags - List image names in a transport-specific collection of images.\n\n## S"
},
{
"path": "docs/skopeo-login.1.md",
"chars": 2665,
"preview": "% skopeo-login(1)\n\n## NAME\nskopeo\\-login - Login to a container registry.\n\n## SYNOPSIS\n**skopeo login** [*options*] _reg"
},
{
"path": "docs/skopeo-logout.1.md",
"chars": 1705,
"preview": "% skopeo-logout(1)\n\n## NAME\nskopeo\\-logout - Logout of a container registry.\n\n## SYNOPSIS\n**skopeo logout** [*options*] "
},
{
"path": "docs/skopeo-manifest-digest.1.md",
"chars": 627,
"preview": "% skopeo-manifest-digest(1)\n\n## NAME\nskopeo\\-manifest\\-digest - Compute a manifest digest for a manifest-file and write "
},
{
"path": "docs/skopeo-standalone-sign.1.md",
"chars": 1912,
"preview": "% skopeo-standalone-sign(1)\n\n## NAME\nskopeo\\-standalone-sign - Debugging tool - Sign an image locally without uploading."
},
{
"path": "docs/skopeo-standalone-verify.1.md",
"chars": 2217,
"preview": "% skopeo-standalone-verify(1)\n\n## NAME\nskopeo\\-standalone\\-verify - Debugging tool - Verify an image signature from loca"
},
{
"path": "docs/skopeo-sync.1.md",
"chars": 11448,
"preview": "% skopeo-sync(1)\n\n## NAME\nskopeo\\-sync - Synchronize images between registry repositories and local directories.\n\n\n## SY"
},
{
"path": "docs/skopeo.1.md",
"chars": 7910,
"preview": "% SKOPEO(1) Skopeo Man Pages\n% Jhon Honce\n% August 2016\n## NAME\nskopeo -- Command line utility used to interact with loc"
},
{
"path": "docs-experimental/skopeo-experimental-image-proxy.1.md",
"chars": 9908,
"preview": "% skopeo-experimental-image-proxy(1)\n\n# NAME\nskopeo-experimental-image-proxy - API server for fetching container images "
},
{
"path": "go.mod",
"chars": 5471,
"preview": "module github.com/containers/skopeo\n\n// Minimum required golang version\ngo 1.25.0\n\n// Warning: Ensure the \"go\" and \"tool"
},
{
"path": "go.sum",
"chars": 31534,
"preview": "cyphar.com/go-pathrs v0.2.4 h1:iD/mge36swa1UFKdINkr1Frkpp6wZsy3YYEildj9cLY=\ncyphar.com/go-pathrs v0.2.4/go.mod h1:y8f1EM"
},
{
"path": "hack/btrfs_installed_tag.sh",
"chars": 175,
"preview": "#!/usr/bin/env bash\n${CPP:-${CC:-cc} -E} ${CPPFLAGS} - > /dev/null 2> /dev/null << EOF\n#include <btrfs/ioctl.h>\nEOF\nif t"
},
{
"path": "hack/get_ci_vm.sh",
"chars": 2029,
"preview": "#!/usr/bin/env bash\n\n#\n# For help and usage information, simply execute the script w/o any arguments.\n#\n# This script is"
},
{
"path": "hack/get_fqin.sh",
"chars": 1187,
"preview": "#!/usr/bin/env bash\n\n# This script is intended to be called from the Makefile. It's purpose\n# is to automation correspo"
},
{
"path": "hack/libsubid_tag.sh",
"chars": 548,
"preview": "#!/usr/bin/env bash\nif test $(${GO:-go} env GOOS) != \"linux\" ; then\n\texit 0\nfi\ntmpdir=\"$PWD/tmp.$RANDOM\"\nmkdir -p \"$tmpd"
},
{
"path": "hack/man-page-checker",
"chars": 5428,
"preview": "#!/usr/bin/env bash\n#\n# man-page-checker - validate and cross-reference man page names\n#\n# This is the script that cross"
},
{
"path": "hack/sqlite_tag.sh",
"chars": 144,
"preview": "#!/usr/bin/env bash\n${CPP:-${CC:-cc} -E} ${CPPFLAGS} - &> /dev/null << EOF\n#include <sqlite3.h>\nEOF\nif test $? -eq 0 ; t"
},
{
"path": "hack/test-system.sh",
"chars": 1638,
"preview": "#!/bin/bash\nset -e\n\n# These tests can run in/outside of a container. However,\n# not all storage drivers are supported i"
},
{
"path": "hack/tree_status.sh",
"chars": 223,
"preview": "#!/usr/bin/env bash\nset -e\n\nSTATUS=$(git status --porcelain)\nif [[ -z $STATUS ]]\nthen\n\techo \"tree is clean\"\nelse\n\techo \""
},
{
"path": "hack/validate-git-marks.sh",
"chars": 587,
"preview": "#!/usr/bin/env bash\n\nIFS=$'\\n'\nfiles=( $(git ls-tree -r HEAD --name-only | grep -v '^vendor/' || true) )\nunset IFS\n\nbadF"
},
{
"path": "hack/validate-vet.sh",
"chars": 326,
"preview": "#!/bin/bash\n\nerrors=$(go vet -tags=\"${BUILDTAGS}\" ./... 2>&1)\n\nif [ -z \"$errors\" ]; then\n\techo 'Congratulations! All Go"
},
{
"path": "hack/warn-destructive-tests.sh",
"chars": 713,
"preview": "#!/usr/bin/env bash\nset -e\n\n# Set this to 1 to enable installation/modification of environment/services\nexport SKOPEO_CO"
},
{
"path": "hack/xref-helpmsgs-manpages",
"chars": 8196,
"preview": "#!/usr/bin/perl\n#\n# xref-helpmsgs-manpages - cross-reference --help options against man pages\n#\npackage LibPod::CI::Xref"
},
{
"path": "install.md",
"chars": 8816,
"preview": "# Installing Skopeo\n\n## Distribution Packages\n`skopeo` may already be packaged in your distribution. This document lists"
},
{
"path": "integration/blocked_test.go",
"chars": 1077,
"preview": "package main\n\nconst (\n\tblockedRegistriesConf = \"./fixtures/blocked-registries.conf\"\n\tblockedErrorRegex = `.*registry"
},
{
"path": "integration/check_test.go",
"chars": 4491,
"preview": "package main\n\nimport (\n\t\"fmt\"\n\t\"os/exec\"\n\t\"testing\"\n\n\t\"github.com/containers/skopeo/version\"\n\t\"github.com/stretchr/testi"
},
{
"path": "integration/copy_test.go",
"chars": 72171,
"preview": "package main\n\nimport (\n\t\"crypto/rand\"\n\t\"crypto/rsa\"\n\t\"crypto/x509\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io/fs\"\n\t\"log\"\n\t\"maps\"\n\t\"net"
},
{
"path": "integration/fixtures/.gitignore",
"chars": 27,
"preview": "/data/pgp.cert.d/_sequoia*\n"
},
{
"path": "integration/fixtures/blocked-registries.conf",
"chars": 112,
"preview": "[[registry]]\nlocation = \"registry-unblocked.com\"\n\n[[registry]]\nlocation = \"registry-blocked.com\"\nblocked = true\n"
},
{
"path": "integration/fixtures/data/keystore/keystore.cookie",
"chars": 0,
"preview": ""
},
{
"path": "integration/fixtures/data/pgp.cert.d/writelock",
"chars": 0,
"preview": ""
},
{
"path": "integration/fixtures/image.manifest.json",
"chars": 995,
"preview": "{\n \"schemaVersion\": 2,\n \"mediaType\": \"application/vnd.docker.distribution.manifest.v2+json\",\n \"config\": {\n "
},
{
"path": "integration/fixtures/no-passphrase.pub",
"chars": 2285,
"preview": "-----BEGIN PGP PUBLIC KEY BLOCK-----\n\nxjMEaGwFVhYJKwYBBAHaRw8BAQdAZzfnqEAgvE3RoCtPWEOc3Xp8oMURR0qjq+Ru\nPHJrc6TCwAsEHxYKA"
},
{
"path": "integration/fixtures/policy.json",
"chars": 5014,
"preview": "{\n \"default\": [\n {\n \"type\": \"reject\"\n }\n ],\n \"transports\": {\n \"docker\": {\n "
},
{
"path": "integration/fixtures/registries.conf",
"chars": 827,
"preview": "[[registry]]\nlocation = \"mirror.invalid\"\nmirror = [\n { location = \"mirror-0.invalid\" },\n { location = \"mirror-1.in"
},
{
"path": "integration/fixtures/registries.yaml",
"chars": 173,
"preview": "docker:\n localhost:5555:\n lookaside: file://@lookaside@\n localhost:5555/public:\n lookaside-staging: fi"
},
{
"path": "integration/fixtures/tls-details-1.3.yaml",
"chars": 18,
"preview": "minVersion: \"1.3\"\n"
},
{
"path": "integration/fixtures/tls-details-anything.yaml",
"chars": 15,
"preview": "{} # No fields\n"
},
{
"path": "integration/fixtures/tls-details-pqc-only.yaml",
"chars": 52,
"preview": "minVersion: \"1.3\"\nnamedGroups:\n - \"X25519MLKEM768\"\n"
},
{
"path": "integration/fixtures/uncompressed-image-s1/manifest.json",
"chars": 2135,
"preview": "{\n \"schemaVersion\": 1,\n \"name\": \"nonempty\",\n \"tag\": \"nonempty\",\n \"architecture\": \"amd64\",\n \"fsLayers\": [\n "
},
{
"path": "integration/fixtures/uncompressed-image-s2/86ce150e65c72b30f885c261449d18b7c6832596916e7f654e08377b5a67b4ff",
"chars": 1272,
"preview": "{\"architecture\":\"amd64\",\"config\":{\"Hostname\":\"59c20544b2f4\",\"Domainname\":\"\",\"User\":\"\",\"AttachStdin\":false,\"AttachStdout\""
},
{
"path": "integration/fixtures/uncompressed-image-s2/manifest.json",
"chars": 504,
"preview": "{\n \"schemaVersion\": 2,\n \"mediaType\": \"application/vnd.docker.distribution.manifest.v2+json\",\n \"config\": {\n \"m"
},
{
"path": "integration/fixtures/with-passphrase.passphrase",
"chars": 18,
"preview": "WithPassphrase123\n"
},
{
"path": "integration/fixtures/with-passphrase.pub",
"chars": 2306,
"preview": "-----BEGIN PGP PUBLIC KEY BLOCK-----\n\nxjMEaGwF3RYJKwYBBAHaRw8BAQdAouHF6y7foOScub78AINlTzXnEQrYrAJyH8fr\n3biwuMzCwAsEHxYKA"
},
{
"path": "integration/fixtures_info_test.go",
"chars": 900,
"preview": "package main\n\nconst (\n\t// TestImageManifestDigest is the Docker manifest digest of \"fixtures/image.manifest.json\"\n\tTestI"
},
{
"path": "integration/openshift_shell_test.go",
"chars": 1562,
"preview": "//go:build openshift_shell\n\npackage main\n\nimport (\n\t\"os\"\n\t\"os/exec\"\n\n\t\"github.com/stretchr/testify/assert\"\n\t\"github.com/"
},
{
"path": "integration/openshift_test.go",
"chars": 10055,
"preview": "package main\n\nimport (\n\t\"bufio\"\n\t\"context\"\n\t\"encoding/base64\"\n\t\"fmt\"\n\t\"os\"\n\t\"os/exec\"\n\t\"path/filepath\"\n\t\"slices\"\n\t\"strin"
},
{
"path": "integration/procutils_linux_test.go",
"chars": 269,
"preview": "package main\n\nimport (\n\t\"os/exec\"\n\t\"syscall\"\n)\n\n// cmdLifecycleToParentIfPossible is a thin wrapper around prctl(PR_SET_"
},
{
"path": "integration/procutils_test.go",
"chars": 216,
"preview": "//go:build unix && !linux\n\npackage main\n\nimport (\n\t\"os/exec\"\n)\n\n// cmdLifecycleToParentIfPossible tries to exit if the p"
},
{
"path": "integration/proxy_test.go",
"chars": 11553,
"preview": "//go:build unix\n\npackage main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"net\"\n\t\"os\"\n\t\"os/exec\"\n\t\"strings\"\n\t\"sync\"\n\t\"sysca"
},
{
"path": "integration/registry_test.go",
"chars": 3685,
"preview": "package main\n\nimport (\n\t\"fmt\"\n\t\"net/http\"\n\t\"os\"\n\t\"os/exec\"\n\t\"path/filepath\"\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/stretchr/te"
},
{
"path": "integration/signing_test.go",
"chars": 1778,
"preview": "package main\n\nimport (\n\t\"fmt\"\n\t\"os/exec\"\n\t\"path/filepath\"\n\t\"testing\"\n\n\t\"github.com/stretchr/testify/require\"\n\t\"github.co"
},
{
"path": "integration/sync_test.go",
"chars": 21383,
"preview": "package main\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"io/fs\"\n\t\"os\"\n\t\"path\"\n\t\"path/filepath\"\n\t\"regexp\"\n\t\"strings\"\n\t\"testing\"\n\n\timgsp"
},
{
"path": "integration/tls_test.go",
"chars": 8465,
"preview": "package main\n\nimport (\n\t\"context\"\n\t\"crypto/rand\"\n\t\"crypto/rsa\"\n\t\"crypto/tls\"\n\t\"crypto/x509\"\n\t\"crypto/x509/pkix\"\n\t\"encodi"
},
{
"path": "integration/user_agent_test.go",
"chars": 3716,
"preview": "package main\n\nimport (\n\t\"net/http\"\n\t\"net/http/httptest\"\n\t\"slices\"\n\t\"strings\"\n\t\"sync\"\n\t\"testing\"\n\n\t\"github.com/stretchr/t"
},
{
"path": "integration/utils_test.go",
"chars": 11342,
"preview": "package main\n\nimport (\n\t\"bytes\"\n\t\"compress/gzip\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"io\"\n\t\"net\"\n\t\"net/netip\"\n\t\"os\"\n\t\"os/exec\"\n\t"
},
{
"path": "plans/main.fmf",
"chars": 1016,
"preview": "discover:\n how: fmf\nexecute:\n how: tmt\nprepare:\n - when: distro == centos-stream or distro == rhel\n how: s"
},
{
"path": "rpm/skopeo.spec",
"chars": 4857,
"preview": "%global with_debug 1\n\n%if 0%{?with_debug}\n%global _find_debuginfo_dwz_opts %{nil}\n%global _dwz_low_mem_die_limit 0\n%else"
},
{
"path": "systemtest/001-basic.bats",
"chars": 1411,
"preview": "#!/usr/bin/env bats\n#\n# Simplest set of skopeo tests. If any of these fail, we have serious problems.\n#\n\nload helpers\n\n#"
},
{
"path": "systemtest/010-inspect.bats",
"chars": 5663,
"preview": "#!/usr/bin/env bats\n#\n# Simplest test for skopeo inspect\n#\n\nload helpers\n\n@test \"inspect: basic\" {\n workdir=$TESTDIR/"
},
{
"path": "systemtest/020-copy.bats",
"chars": 5216,
"preview": "#!/usr/bin/env bats\n#\n# Copy tests\n#\n\nload helpers\n\nfunction setup() {\n standard_setup\n\n start_registry reg\n}\n\n# F"
},
{
"path": "systemtest/030-local-registry-tls.bats",
"chars": 1078,
"preview": "#!/usr/bin/env bats\n#\n# Confirm that skopeo will push to and pull from a local\n# registry with locally-created TLS certi"
},
{
"path": "systemtest/040-local-registry-auth.bats",
"chars": 4663,
"preview": "#!/usr/bin/env bats\n#\n# Tests with a local registry with auth\n#\n\nload helpers\n\nfunction setup() {\n standard_setup\n\n "
},
{
"path": "systemtest/050-signing.bats",
"chars": 8897,
"preview": "#!/usr/bin/env bats\n#\n# Tests with gpg signing\n#\n\nload helpers\n\nfunction setup() {\n standard_setup\n\n # Create dumm"
},
{
"path": "systemtest/060-delete.bats",
"chars": 821,
"preview": "#!/usr/bin/env bats\n#\n# Copy tests\n#\n\nload helpers\n\nfunction setup() {\n standard_setup\n\n start_registry --enable-d"
},
{
"path": "systemtest/070-list-tags.bats",
"chars": 697,
"preview": "#!/usr/bin/env bats\n#\n# list-tags tests\n#\n\nload helpers\n\n# list from registry\n@test \"list-tags: remote repository on a r"
},
{
"path": "systemtest/080-sync.bats",
"chars": 572,
"preview": "#!/usr/bin/env bats\n#\n# Sync tests\n#\n\nload helpers\n\nfunction setup() {\n standard_setup\n}\n\n@test \"sync: --dry-run\" {\n "
},
{
"path": "systemtest/helpers.bash",
"chars": 13415,
"preview": "#!/bin/bash\n\n# Directory containing system test sources\nTEST_SOURCE_DIR=${TEST_SOURCE_DIR:-$(dirname ${BASH_SOURCE})}\n\n#"
},
{
"path": "systemtest/make-noarch-manifest",
"chars": 1643,
"preview": "#!/bin/sh\n#\n# Tool for creating an image whose OS and arch will (probably) never\n# match a system on which skopeo will r"
},
{
"path": "systemtest/run-tests",
"chars": 260,
"preview": "#!/bin/bash\n#\n# run-tests - simple wrapper allowing shortcuts on invocation\n#\n\nTEST_DIR=$(dirname $0)\nTESTS=$TEST_DIR\n\nf"
},
{
"path": "systemtest/tmt/main.fmf",
"chars": 475,
"preview": "environment:\n SKOPEO_BINARY: /usr/bin/skopeo\n\nadjust:\n - when: initiator != \"packit\"\n environment+:\n R"
},
{
"path": "vendor/cyphar.com/go-pathrs/.golangci.yml",
"chars": 863,
"preview": "# SPDX-License-Identifier: MPL-2.0\n#\n# libpathrs: safe path resolution on Linux\n# Copyright (C) 2019-2025 SUSE LLC\n# Cop"
},
{
"path": "vendor/cyphar.com/go-pathrs/COPYING",
"chars": 16726,
"preview": "Mozilla Public License Version 2.0\n==================================\n\n1. Definitions\n--------------\n\n1.1. \"Contributor\""
},
{
"path": "vendor/cyphar.com/go-pathrs/doc.go",
"chars": 499,
"preview": "// SPDX-License-Identifier: MPL-2.0\n/*\n * libpathrs: safe path resolution on Linux\n * Copyright (C) 2019-2025 SUSE LLC\n "
},
{
"path": "vendor/cyphar.com/go-pathrs/handle_linux.go",
"chars": 3910,
"preview": "//go:build linux\n\n// SPDX-License-Identifier: MPL-2.0\n/*\n * libpathrs: safe path resolution on Linux\n * Copyright (C) 20"
},
{
"path": "vendor/cyphar.com/go-pathrs/internal/fdutils/fd_linux.go",
"chars": 2214,
"preview": "//go:build linux\n\n// SPDX-License-Identifier: MPL-2.0\n/*\n * libpathrs: safe path resolution on Linux\n * Copyright (C) 20"
},
{
"path": "vendor/cyphar.com/go-pathrs/internal/libpathrs/error_unix.go",
"chars": 936,
"preview": "//go:build linux\n\n// TODO: Use \"go:build unix\" once we bump the minimum Go version 1.19.\n\n// SPDX-License-Identifier: MP"
},
{
"path": "vendor/cyphar.com/go-pathrs/internal/libpathrs/libpathrs_linux.go",
"chars": 10898,
"preview": "//go:build linux\n\n// SPDX-License-Identifier: MPL-2.0\n/*\n * libpathrs: safe path resolution on Linux\n * Copyright (C) 20"
},
{
"path": "vendor/cyphar.com/go-pathrs/procfs/procfs_linux.go",
"chars": 8871,
"preview": "//go:build linux\n\n// SPDX-License-Identifier: MPL-2.0\n/*\n * libpathrs: safe path resolution on Linux\n * Copyright (C) 20"
},
{
"path": "vendor/cyphar.com/go-pathrs/root_linux.go",
"chars": 11586,
"preview": "//go:build linux\n\n// SPDX-License-Identifier: MPL-2.0\n/*\n * libpathrs: safe path resolution on Linux\n * Copyright (C) 20"
},
{
"path": "vendor/cyphar.com/go-pathrs/utils_linux.go",
"chars": 1351,
"preview": "//go:build linux\n\n// SPDX-License-Identifier: MPL-2.0\n/*\n * libpathrs: safe path resolution on Linux\n * Copyright (C) 20"
},
{
"path": "vendor/dario.cat/mergo/.deepsource.toml",
"chars": 142,
"preview": "version = 1\n\ntest_patterns = [\n \"*_test.go\"\n]\n\n[[analyzers]]\nname = \"go\"\nenabled = true\n\n [analyzers.meta]\n import_pa"
},
{
"path": "vendor/dario.cat/mergo/.gitignore",
"chars": 517,
"preview": "#### joe made this: http://goel.io/joe\n\n#### go ####\n# Binaries for programs and plugins\n*.exe\n*.dll\n*.so\n*.dylib\n\n# Tes"
},
{
"path": "vendor/dario.cat/mergo/.travis.yml",
"chars": 273,
"preview": "language: go\narch:\n - amd64\n - ppc64le\ninstall:\n - go get -t\n - go get golang.org/x/tools/cmd/cover\n - go get g"
},
{
"path": "vendor/dario.cat/mergo/CODE_OF_CONDUCT.md",
"chars": 3207,
"preview": "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nIn the interest of fostering an open and welcoming environment, w"
},
{
"path": "vendor/dario.cat/mergo/CONTRIBUTING.md",
"chars": 8065,
"preview": "<!-- omit in toc -->\n# Contributing to mergo\n\nFirst off, thanks for taking the time to contribute! ❤️\n\nAll types of cont"
},
{
"path": "vendor/dario.cat/mergo/FUNDING.json",
"chars": 107,
"preview": "{\n \"drips\": {\n \"ethereum\": {\n \"ownedBy\": \"0x6160020e7102237aC41bdb156e94401692D76930\"\n }\n }\n}\n"
},
{
"path": "vendor/dario.cat/mergo/LICENSE",
"chars": 1534,
"preview": "Copyright (c) 2013 Dario Castañé. All rights reserved.\nCopyright (c) 2012 The Go Authors. All rights reserved.\n\nRedistri"
},
{
"path": "vendor/dario.cat/mergo/README.md",
"chars": 9005,
"preview": "# Mergo\n\n[![GitHub release][5]][6]\n[![GoCard][7]][8]\n[![Test status][1]][2]\n[![OpenSSF Scorecard][21]][22]\n[ in Go. Specifica"
},
{
"path": "vendor/github.com/Masterminds/semver/v3/SECURITY.md",
"chars": 546,
"preview": "# Security Policy\n\n## Supported Versions\n\nThe following versions of semver are currently supported:\n\n| Version | Support"
},
{
"path": "vendor/github.com/Masterminds/semver/v3/collection.go",
"chars": 729,
"preview": "package semver\n\n// Collection is a collection of Version instances and implements the sort\n// interface. See the sort pa"
},
{
"path": "vendor/github.com/Masterminds/semver/v3/constraints.go",
"chars": 17139,
"preview": "package semver\n\nimport (\n\t\"bytes\"\n\t\"errors\"\n\t\"fmt\"\n\t\"regexp\"\n\t\"strings\"\n)\n\n// Constraints is one or more constraint that"
},
{
"path": "vendor/github.com/Masterminds/semver/v3/doc.go",
"chars": 6879,
"preview": "/*\nPackage semver provides the ability to work with Semantic Versions (http://semver.org) in Go.\n\nSpecifically it provid"
},
{
"path": "vendor/github.com/Masterminds/semver/v3/version.go",
"chars": 20074,
"preview": "package semver\n\nimport (\n\t\"bytes\"\n\t\"database/sql/driver\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"regexp\"\n\t\"strconv\"\n\t\"string"
},
{
"path": "vendor/github.com/Microsoft/go-winio/.gitattributes",
"chars": 18,
"preview": "* text=auto eol=lf"
},
{
"path": "vendor/github.com/Microsoft/go-winio/.gitignore",
"chars": 73,
"preview": ".vscode/\n\n*.exe\n\n# testing\ntestdata\n\n# go workspaces\ngo.work\ngo.work.sum\n"
},
{
"path": "vendor/github.com/Microsoft/go-winio/.golangci.yml",
"chars": 4244,
"preview": "linters:\n enable:\n # style\n - containedctx # struct contains a context\n - dupl # duplicate code\n - errname "
},
{
"path": "vendor/github.com/Microsoft/go-winio/CODEOWNERS",
"chars": 29,
"preview": " * @microsoft/containerplat\n"
},
{
"path": "vendor/github.com/Microsoft/go-winio/LICENSE",
"chars": 1077,
"preview": "The MIT License (MIT)\n\nCopyright (c) 2015 Microsoft\n\nPermission is hereby granted, free of charge, to any person obtaini"
},
{
"path": "vendor/github.com/Microsoft/go-winio/README.md",
"chars": 3771,
"preview": "# go-winio [](https://github.co"
},
{
"path": "vendor/github.com/Microsoft/go-winio/SECURITY.md",
"chars": 2757,
"preview": "<!-- BEGIN MICROSOFT SECURITY.MD V0.0.7 BLOCK -->\n\n## Security\n\nMicrosoft takes the security of our software products an"
},
{
"path": "vendor/github.com/Microsoft/go-winio/backup.go",
"chars": 8330,
"preview": "//go:build windows\n// +build windows\n\npackage winio\n\nimport (\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"runtime\""
},
{
"path": "vendor/github.com/Microsoft/go-winio/doc.go",
"chars": 1076,
"preview": "// This package provides utilities for efficiently performing Win32 IO operations in Go.\n// Currently, this package is p"
},
{
"path": "vendor/github.com/Microsoft/go-winio/ea.go",
"chars": 3178,
"preview": "package winio\n\nimport (\n\t\"bytes\"\n\t\"encoding/binary\"\n\t\"errors\"\n)\n\ntype fileFullEaInformation struct {\n\tNextEntryOffset ui"
},
{
"path": "vendor/github.com/Microsoft/go-winio/file.go",
"chars": 8132,
"preview": "//go:build windows\n// +build windows\n\npackage winio\n\nimport (\n\t\"errors\"\n\t\"io\"\n\t\"runtime\"\n\t\"sync\"\n\t\"sync/atomic\"\n\t\"syscal"
},
{
"path": "vendor/github.com/Microsoft/go-winio/fileinfo.go",
"chars": 3619,
"preview": "//go:build windows\n// +build windows\n\npackage winio\n\nimport (\n\t\"os\"\n\t\"runtime\"\n\t\"unsafe\"\n\n\t\"golang.org/x/sys/windows\"\n)\n"
},
{
"path": "vendor/github.com/Microsoft/go-winio/hvsock.go",
"chars": 15948,
"preview": "//go:build windows\n// +build windows\n\npackage winio\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"net\"\n\t\"os\"\n\t\"time\"\n\t\"u"
},
{
"path": "vendor/github.com/Microsoft/go-winio/internal/fs/doc.go",
"chars": 68,
"preview": "// This package contains Win32 filesystem functionality.\npackage fs\n"
},
{
"path": "vendor/github.com/Microsoft/go-winio/internal/fs/fs.go",
"chars": 10077,
"preview": "//go:build windows\n\npackage fs\n\nimport (\n\t\"golang.org/x/sys/windows\"\n\n\t\"github.com/Microsoft/go-winio/internal/stringbuf"
},
{
"path": "vendor/github.com/Microsoft/go-winio/internal/fs/security.go",
"chars": 469,
"preview": "package fs\n\n// https://learn.microsoft.com/en-us/windows/win32/api/winnt/ne-winnt-security_impersonation_level\ntype Secu"
},
{
"path": "vendor/github.com/Microsoft/go-winio/internal/fs/zsyscall_windows.go",
"chars": 1754,
"preview": "//go:build windows\n\n// Code generated by 'go generate' using \"github.com/Microsoft/go-winio/tools/mkwinsyscall\"; DO NOT "
}
]
// ... and 3010 more files (download for full content)
About this extraction
This page contains the full source code of the containers/skopeo GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 3210 files (37.2 MB), approximately 9.9M tokens, and a symbol index with 136054 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.