mirror of
https://github.com/linuxkit/linuxkit.git
synced 2025-12-24 11:03:31 +00:00
Current package.mk will operate on the first dependence object 'check-dirty', which will result the make process abort earlier with below message: pkg/package.mk:60: *** Your repository is not clean. Will not push package image. Stop. This is not expected behavior since we have no chance to build a docker image locally in case of the user has no intention to push that image. This patch adjust the dependece order for the default target, thus we can build the docker image locally but can't push that image since we're in a dirty git repository. Signed-off-by: Dennis Chen <dennis.chen@arm.com>
76 lines
1.9 KiB
Makefile
76 lines
1.9 KiB
Makefile
.PHONY: image tag forcetag show-tag check-dirty push forcepush
|
|
default: push
|
|
|
|
ORG?=linuxkit
|
|
SOURCE ?= .
|
|
|
|
# Hash is of $(CURDIR) not $(CURDIR)$(SOURCE) to allow autogenerated
|
|
# source subdirectories (which would not be covered by ls-tree, but
|
|
# the code which autogenerates should be in $(CURDIR) so that is what
|
|
# we want to use.
|
|
ifeq ($(HASH),)
|
|
HASH_COMMIT?=HEAD # Setting this is only really useful with the show-tag target
|
|
HASH?=$(shell git ls-tree --full-tree $(HASH_COMMIT) -- $(CURDIR) | awk '{print $$3}')
|
|
|
|
ifneq ($(HASH_COMMIT),HEAD) # Others can't be dirty by definition
|
|
DIRTY:=$(shell git update-index -q --refresh && git diff-index --quiet HEAD -- $(CURDIR) || echo "-dirty")
|
|
endif
|
|
endif
|
|
|
|
TAG:=$(ORG)/$(IMAGE):$(HASH)$(DIRTY)
|
|
|
|
REPO?=https://github.com/linuxkit/linuxkit
|
|
ifneq ($(REPO),)
|
|
REPO_LABEL=--label org.opencontainers.image.source=$(REPO)
|
|
endif
|
|
ifeq ($(DIRTY),)
|
|
REPO_COMMIT=$(shell git rev-parse HEAD)
|
|
COMMIT_LABEL=--label org.opencontainers.image.revision=$(REPO_COMMIT)
|
|
endif
|
|
LABELS=$(REPO_LABEL) $(COMMIT_LABEL)
|
|
|
|
BASE_DEPS=Dockerfile Makefile
|
|
|
|
# Get a release tag, if present
|
|
RELEASE:=$(shell git tag -l --points-at HEAD)
|
|
|
|
ifdef NETWORK
|
|
NET_OPT=
|
|
else
|
|
NET_OPT=--network=none
|
|
endif
|
|
|
|
ifeq ($(DOCKER_CONTENT_TRUST),)
|
|
ifndef NOTRUST
|
|
export DOCKER_CONTENT_TRUST=1
|
|
endif
|
|
endif
|
|
|
|
show-tag:
|
|
@echo $(TAG)
|
|
|
|
tag: $(BASE_DEPS) $(DEPS)
|
|
docker pull $(TAG) || docker build $(LABELS) $(NET_OPT) -t $(TAG) $(SOURCE)
|
|
|
|
forcetag: $(BASE_DEPS) $(DEPS)
|
|
docker build $(LABELS) $(NET_OPT) -t $(TAG) $(SOURCE)
|
|
|
|
check-dirty:
|
|
ifneq ($(DIRTY),)
|
|
$(error Your repository is not clean. Will not push package image)
|
|
endif
|
|
|
|
push: tag check-dirty
|
|
docker pull $(TAG) || docker push $(TAG)
|
|
ifneq ($(RELEASE),)
|
|
docker tag $(TAG) $(ORG)/$(IMAGE):$(RELEASE)
|
|
docker push $(ORG)/$(IMAGE):$(RELEASE)
|
|
endif
|
|
|
|
forcepush: forcetag check-dirty
|
|
docker push $(TAG)
|
|
ifneq ($(RELEASE),)
|
|
docker tag $(TAG) $(ORG)/$(IMAGE):$(RELEASE)
|
|
docker push $(ORG)/$(IMAGE):$(RELEASE)
|
|
endif
|