// Copyright 2020 The Monogon Project Authors.
//
// SPDX-License-Identifier: Apache-2.0
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package main

func depsContainerd(p *planner) {
	p.collectOverride(
		"github.com/containerd/containerd", "v1.4.3",
		buildTags("no_zfs", "no_aufs", "no_devicemapper", "no_btrfs"),
		disabledProtoBuild,
	).use(
		"github.com/BurntSushi/toml",
		"github.com/Microsoft/go-winio",
		"github.com/beorn7/perks",
		"github.com/cespare/xxhash/v2",
		"github.com/cilium/ebpf",
		"github.com/containerd/btrfs",
		"github.com/containerd/console",
		"github.com/containerd/continuity",
		"github.com/containerd/fifo",
		"github.com/containerd/go-cni",
		"github.com/containerd/go-runc",
		"github.com/containerd/imgcrypt",
		"github.com/containers/ocicrypt",
		"github.com/containerd/typeurl",
		"github.com/coreos/go-systemd/v22",
		"github.com/cpuguy83/go-md2man/v2",
		"github.com/davecgh/go-spew",
		"github.com/docker/docker",
		"github.com/docker/go-events",
		"github.com/docker/go-metrics",
		"github.com/docker/go-units",
		"github.com/docker/spdystream",
		"github.com/emicklei/go-restful",
		"github.com/fullsailor/pkcs7",
		"github.com/godbus/dbus/v5",
		"github.com/gogo/protobuf",
		"github.com/go-logr/logr",
		"github.com/google/gofuzz",
		"github.com/google/uuid",
		"github.com/hashicorp/errwrap",
		"github.com/hashicorp/go-multierror",
		"github.com/hashicorp/golang-lru",
		"github.com/imdario/mergo",
		"github.com/json-iterator/go",
		"github.com/konsorten/go-windows-terminal-sequences",
		"github.com/matttproud/golang_protobuf_extensions",
		"github.com/modern-go/concurrent",
		"github.com/modern-go/reflect2",
		"github.com/opencontainers/go-digest",
		"github.com/opencontainers/image-spec",
		"github.com/opencontainers/runc",
		"github.com/opencontainers/runtime-spec",
		"github.com/pkg/errors",
		"github.com/prometheus/client_golang",
		"github.com/prometheus/client_model",
		"github.com/prometheus/common",
		"github.com/prometheus/procfs",
		"github.com/russross/blackfriday/v2",
		"github.com/shurcooL/sanitized_anchor_name",
		"github.com/sirupsen/logrus",
		"github.com/syndtr/gocapability",
		"github.com/tchap/go-patricia",
		"github.com/urfave/cli",
		"go.etcd.io/bbolt",
		"go.opencensus.io",
		"golang.org/x/crypto",
		"golang.org/x/oauth2",
		"golang.org/x/sync",
		"google.golang.org/genproto",
		"gopkg.in/inf.v0",
		"gopkg.in/yaml.v2",
		"k8s.io/klog/v2",
		"sigs.k8s.io/yaml",
	).with(disabledProtoBuild, patches("containerd-netns-statedir.patch")).use(
		"github.com/containerd/cri",
	).with(disabledProtoBuild).use(
		"github.com/Microsoft/hcsshim",
		"github.com/containerd/cgroups",

		"github.com/gogo/googleapis",
	).with(buildTags("selinux")).use(
		"github.com/opencontainers/selinux",
		"github.com/willf/bitset",
	).with(patches(
		"ttrpc-hacks.patch",
	)).use(
		"github.com/containerd/ttrpc",
	).with(patches(
		"cni-fix-cachepath.patch",
	)).use("github.com/containernetworking/cni").replace(
		// ttrpc is broken by go protobuf v2, this is a tentative PR that's
		// not yet merged by upstream.
		// See: https://github.com/containerd/ttrpc/pull/67
		//
		// It also contains our own fix that builds up on the above and allows services to
		// return the original status error library values. This is required for ttrpc to
		// actually work from runsc and for results to be correctly interpreted by
		// containerd. See:
		//   https://github.com/monogon-dev/ttrpc/commit/222b428f008e3ecb11cfff12e3fd92e3143a2f01
		//
		// Note: this is not a good fix, and has known issues, like not being
		// able to return Details in gRPC status errors. However, with the
		// limited usage within gvisor/containerd it works. In the future
		// upstream will have to resolve this properly, eg. port ttrpc away
		// from gogo, or fix gogo to work with the new protobuf APU.
		"github.com/containerd/ttrpc",
		"github.com/monogon-dev/ttrpc", "222b428f008e3ecb11cfff12e3fd92e3143a2f01",
	)

	// This is depended on by github.com/containerd/containerd, but not mentioned in
	// their vendor.conf. They seem to be moving off of vendoring to gomod, so this
	// should be reverted on the next containerd bump (when fietsje will panic about
	// vendor.conf missing).
	p.collectOverride(
		"github.com/checkpoint-restore/go-criu/v4", "v4.1.0",
	)

	// containernetworking/plugins
	p.collectOverride(
		"github.com/containernetworking/plugins", "v0.8.2",
	).use(
		"github.com/alexflint/go-filemutex",
		"github.com/coreos/go-iptables",
		"github.com/j-keck/arping",
		"github.com/safchain/ethtool",
	)
}
