github.com/nilium/gitlab-runner@v12.5.0+incompatible/Makefile (about)

     1  NAME ?= gitlab-runner
     2  export PACKAGE_NAME ?= $(NAME)
     3  export VERSION := $(shell ./ci/version)
     4  REVISION := $(shell git rev-parse --short=8 HEAD || echo unknown)
     5  BRANCH := $(shell git show-ref | grep "$(REVISION)" | grep -v HEAD | awk '{print $$2}' | sed 's|refs/remotes/origin/||' | sed 's|refs/heads/||' | sort | head -n 1)
     6  BUILT := $(shell date -u +%Y-%m-%dT%H:%M:%S%z)
     7  export TESTFLAGS ?= -cover
     8  
     9  LATEST_STABLE_TAG := $(shell git -c versionsort.prereleaseSuffix="-rc" -c versionsort.prereleaseSuffix="-RC" tag -l "v*.*.*" --sort=-v:refname | awk '!/rc/' | head -n 1)
    10  export IS_LATEST :=
    11  ifeq ($(shell git describe --exact-match --match $(LATEST_STABLE_TAG) >/dev/null 2>&1; echo $$?), 0)
    12  export IS_LATEST := true
    13  endif
    14  
    15  PACKAGE_CLOUD ?= ayufan/gitlab-ci-multi-runner
    16  PACKAGE_CLOUD_URL ?= https://packagecloud.io/
    17  BUILD_PLATFORMS ?= -os '!netbsd' -os '!openbsd'
    18  S3_UPLOAD_PATH ?= master
    19  
    20  # Keep in sync with docs/install/linux-repository.md
    21  DEB_PLATFORMS ?= debian/jessie debian/stretch debian/buster \
    22      ubuntu/xenial ubuntu/bionic \
    23      raspbian/jessie raspbian/stretch raspbian/buster \
    24      linuxmint/sarah linuxmint/serena linuxmint/sonya
    25  DEB_ARCHS ?= amd64 i386 armel armhf
    26  RPM_PLATFORMS ?= el/6 el/7 \
    27      ol/6 ol/7 \
    28      fedora/29 fedora/30
    29  RPM_ARCHS ?= x86_64 i686 arm armhf
    30  
    31  PKG = gitlab.com/gitlab-org/$(PACKAGE_NAME)
    32  COMMON_PACKAGE_NAMESPACE=$(PKG)/common
    33  
    34  BUILD_DIR := $(CURDIR)
    35  TARGET_DIR := $(BUILD_DIR)/out
    36  
    37  ORIGINAL_GOPATH = $(shell echo $$GOPATH)
    38  LOCAL_GOPATH := $(CURDIR)/.gopath
    39  GOPATH_SETUP := $(LOCAL_GOPATH)/.ok
    40  GOPATH_BIN := $(LOCAL_GOPATH)/bin
    41  PKG_BUILD_DIR := $(LOCAL_GOPATH)/src/$(PKG)
    42  
    43  export GOPATH = $(LOCAL_GOPATH)
    44  export PATH := $(GOPATH_BIN):$(PATH)
    45  
    46  # Packages in vendor/ are included in ./...
    47  # https://github.com/golang/go/issues/11659
    48  export OUR_PACKAGES ?= $(subst _$(BUILD_DIR),$(PKG),$(shell go list ./... | grep -v '/vendor/'))
    49  
    50  GO_LDFLAGS ?= -X $(COMMON_PACKAGE_NAMESPACE).NAME=$(PACKAGE_NAME) -X $(COMMON_PACKAGE_NAMESPACE).VERSION=$(VERSION) \
    51                -X $(COMMON_PACKAGE_NAMESPACE).REVISION=$(REVISION) -X $(COMMON_PACKAGE_NAMESPACE).BUILT=$(BUILT) \
    52                -X $(COMMON_PACKAGE_NAMESPACE).BRANCH=$(BRANCH) \
    53                -s -w
    54  GO_FILES ?= $(shell find . -name '*.go' | grep -v './.gopath/')
    55  export CGO_ENABLED ?= 0
    56  
    57  
    58  # Development Tools
    59  DEP = $(GOPATH_BIN)/dep
    60  GOX = $(GOPATH_BIN)/gox
    61  MOCKERY = $(GOPATH_BIN)/mockery
    62  DEVELOPMENT_TOOLS = $(DEP) $(GOX) $(MOCKERY)
    63  
    64  MOCKERY_FLAGS = -note="This comment works around https://github.com/vektra/mockery/issues/155"
    65  
    66  .PHONY: clean version mocks
    67  
    68  all: deps helper-docker build
    69  
    70  include Makefile.runner_helper.mk
    71  include Makefile.build.mk
    72  include Makefile.package.mk
    73  
    74  help:
    75  	# Commands:
    76  	# make all => deps build
    77  	# make version - show information about current version
    78  	#
    79  	# Development commands:
    80  	# make development_setup  - setup needed environment for tests
    81  	# make build_simple - build executable for your arch and OS
    82  	# make install - install the version suitable for your OS as gitlab-runner
    83  	# make helper-docker - build docker dependencies
    84  	#
    85  	# Testing commands:
    86  	# make test - run project tests
    87  	# make codequality - run code quality analysis
    88  	#
    89  	# Deployment commands:
    90  	# make deps - install all dependencies
    91  	# make build - build project for all supported OSes
    92  	# make package - package project using FPM
    93  	# make packagecloud - send all packages to packagecloud
    94  	# make packagecloud-yank - remove specific version from packagecloud
    95  
    96  version:
    97  	@echo Current version: $(VERSION)
    98  	@echo Current revision: $(REVISION)
    99  	@echo Current branch: $(BRANCH)
   100  	@echo Build platforms: $(BUILD_PLATFORMS)
   101  	@echo DEB platforms: $(DEB_PLATFORMS)
   102  	@echo RPM platforms: $(RPM_PLATFORMS)
   103  	@echo IS_LATEST: $(IS_LATEST)
   104  
   105  deps: $(DEVELOPMENT_TOOLS)
   106  
   107  codequality:
   108  	./scripts/codequality analyze --dev
   109  
   110  
   111  check_race_conditions:
   112  	@./scripts/check_race_conditions $(OUR_PACKAGES)
   113  
   114  test: $(PKG_BUILD_DIR) helper-docker development_setup
   115  	go test $(OUR_PACKAGES) $(TESTFLAGS)
   116  
   117  parallel_test_prepare: $(GOPATH_SETUP)
   118  	# Preparing test commands
   119  	@./scripts/go_test_with_coverage_report prepare
   120  
   121  parallel_test_execute: $(GOPATH_SETUP) pull_images_for_tests
   122  	# executing tests
   123  	@./scripts/go_test_with_coverage_report execute
   124  
   125  parallel_test_coverage_report: $(GOPATH_SETUP)
   126  	# Preparing coverage report
   127  	@./scripts/go_test_with_coverage_report coverage
   128  
   129  parallel_test_junit_report: $(GOPATH_SETUP)
   130  	# Preparing jUnit test report
   131  	@./scripts/go_test_with_coverage_report junit
   132  
   133  pull_images_for_tests: $(GOPATH_SETUP)
   134  	# Pulling images required for some tests
   135  	@go run ./scripts/pull-images-for-tests/main.go
   136  
   137  install:
   138  	go install --ldflags="$(GO_LDFLAGS)" $(PKG)
   139  
   140  dockerfiles:
   141  	make -C dockerfiles all
   142  
   143  # We rely on user GOPATH 'cause mockery seems not to be able to find dependencies in vendor directory
   144  mocks: $(MOCKERY)
   145  	rm -rf ./helpers/service/mocks
   146  	find . -type f ! -path '*vendor/*' -name 'mock_*' -delete
   147  	GOPATH=$(ORIGINAL_GOPATH) mockery $(MOCKERY_FLAGS) -dir=./vendor/github.com/ayufan/golang-kardianos-service -output=./helpers/service/mocks -name='(Interface)'
   148  	GOPATH=$(ORIGINAL_GOPATH) mockery $(MOCKERY_FLAGS) -dir=./helpers/docker -all -inpkg
   149  	GOPATH=$(ORIGINAL_GOPATH) mockery $(MOCKERY_FLAGS) -dir=./helpers/certificate -all -inpkg
   150  	GOPATH=$(ORIGINAL_GOPATH) mockery $(MOCKERY_FLAGS) -dir=./helpers/fslocker -all -inpkg
   151  	GOPATH=$(ORIGINAL_GOPATH) mockery $(MOCKERY_FLAGS) -dir=./executors/docker -all -inpkg
   152  	GOPATH=$(ORIGINAL_GOPATH) mockery $(MOCKERY_FLAGS) -dir=./executors/custom -all -inpkg
   153  	GOPATH=$(ORIGINAL_GOPATH) mockery $(MOCKERY_FLAGS) -dir=./cache -all -inpkg
   154  	GOPATH=$(ORIGINAL_GOPATH) mockery $(MOCKERY_FLAGS) -dir=./common -all -inpkg
   155  	GOPATH=$(ORIGINAL_GOPATH) mockery $(MOCKERY_FLAGS) -dir=./log -all -inpkg
   156  	GOPATH=$(ORIGINAL_GOPATH) mockery $(MOCKERY_FLAGS) -dir=./session -all -inpkg
   157  	GOPATH=$(ORIGINAL_GOPATH) mockery $(MOCKERY_FLAGS) -dir=./shells -all -inpkg
   158  
   159  test-docker:
   160  	make test-docker-image IMAGE=centos:6 TYPE=rpm
   161  	make test-docker-image IMAGE=centos:7 TYPE=rpm
   162  	make test-docker-image IMAGE=debian:wheezy TYPE=deb
   163  	make test-docker-image IMAGE=debian:jessie TYPE=deb
   164  	make test-docker-image IMAGE=ubuntu-upstart:precise TYPE=deb
   165  	make test-docker-image IMAGE=ubuntu-upstart:trusty TYPE=deb
   166  	make test-docker-image IMAGE=ubuntu-upstart:utopic TYPE=deb
   167  
   168  test-docker-image:
   169  	tests/test_installation.sh $(IMAGE) out/$(TYPE)/$(PACKAGE_NAME)_amd64.$(TYPE)
   170  	tests/test_installation.sh $(IMAGE) out/$(TYPE)/$(PACKAGE_NAME)_amd64.$(TYPE) Y
   171  
   172  build-and-deploy:
   173  	make build BUILD_PLATFORMS="-os=linux -arch=amd64"
   174  	make package-deb-fpm ARCH=amd64 PACKAGE_ARCH=amd64
   175  	scp out/deb/$(PACKAGE_NAME)_amd64.deb $(SERVER):
   176  	ssh $(SERVER) dpkg -i $(PACKAGE_NAME)_amd64.deb
   177  
   178  build-and-deploy-binary:
   179  	make build BUILD_PLATFORMS="-os=linux -arch=amd64"
   180  	scp out/binaries/$(PACKAGE_NAME)-linux-amd64 $(SERVER):/usr/bin/gitlab-runner
   181  
   182  packagecloud: packagecloud-deps packagecloud-deb packagecloud-rpm
   183  
   184  packagecloud-deps:
   185  	# Installing packagecloud dependencies...
   186  	gem install package_cloud --version "~> 0.3.0" --no-document
   187  
   188  packagecloud-deb:
   189  	# Sending Debian compatible packages...
   190  	-for DIST in $(DEB_PLATFORMS); do \
   191  		package_cloud push --url $(PACKAGE_CLOUD_URL) $(PACKAGE_CLOUD)/$$DIST out/deb/*.deb; \
   192  	done
   193  
   194  packagecloud-rpm:
   195  	# Sending RedHat compatible packages...
   196  	-for DIST in $(RPM_PLATFORMS); do \
   197  		package_cloud push --url $(PACKAGE_CLOUD_URL) $(PACKAGE_CLOUD)/$$DIST out/rpm/*.rpm; \
   198  	done
   199  
   200  packagecloud-yank:
   201  ifneq ($(YANK),)
   202  	# Removing $(YANK) from packagecloud...
   203  	-for DIST in $(DEB_PLATFORMS); do \
   204  		for ARCH in $(DEB_ARCHS); do \
   205  			package_cloud yank --url $(PACKAGE_CLOUD_URL) $(PACKAGE_CLOUD)/$$DIST $(PACKAGE_NAME)_$(YANK)_$$ARCH.deb & \
   206  		done; \
   207  	done; \
   208  	for DIST in $(RPM_PLATFORMS); do \
   209  		for ARCH in $(RPM_ARCHS); do \
   210  			package_cloud yank --url $(PACKAGE_CLOUD_URL) $(PACKAGE_CLOUD)/$$DIST $(PACKAGE_NAME)-$(YANK)-1.$$ARCH.rpm & \
   211  		done; \
   212  	done; \
   213  	wait
   214  else
   215  	# No version specified in YANK
   216  	@exit 1
   217  endif
   218  
   219  s3-upload:
   220  	export ARTIFACTS_DEST=artifacts; curl -sL https://raw.githubusercontent.com/travis-ci/artifacts/master/install | bash
   221  	./artifacts upload \
   222  		--permissions public-read \
   223  		--working-dir out \
   224  		--target-paths "$(S3_UPLOAD_PATH)/" \
   225  		--max-size $(shell du -bs out/ | cut -f1) \
   226  		$(shell cd out/; find . -type f)
   227  	@echo "\n\033[1m==> Download index file: \033[36mhttps://$$ARTIFACTS_S3_BUCKET.s3.amazonaws.com/$$S3_UPLOAD_PATH/index.html\033[0m\n"
   228  
   229  release_packagecloud:
   230  	# Releasing to https://packages.gitlab.com/runner/
   231  	@./ci/release_packagecloud "$$CI_JOB_NAME"
   232  
   233  release_s3: prepare_windows_zip prepare_zoneinfo prepare_index
   234  	# Releasing to S3
   235  	@./ci/release_s3
   236  
   237  out/binaries/gitlab-runner-windows-%.zip: out/binaries/gitlab-runner-windows-%.exe
   238  	zip --junk-paths $@ $<
   239  	cd out/ && zip -r ../$@ helper-images
   240  
   241  prepare_windows_zip: out/binaries/gitlab-runner-windows-386.zip out/binaries/gitlab-runner-windows-amd64.zip
   242  
   243  prepare_zoneinfo:
   244  	# preparing the zoneinfo file
   245  	@cp $$GOROOT/lib/time/zoneinfo.zip out/
   246  
   247  prepare_index:
   248  	# Preparing index file
   249  	@./ci/prepare_index
   250  
   251  release_docker_images: export RUNNER_BINARY := out/binaries/gitlab-runner-linux-amd64
   252  release_docker_images:
   253  	# Releasing Docker images
   254  	@./ci/release_docker_images
   255  
   256  check-tags-in-changelog:
   257  	# Looking for tags in CHANGELOG
   258  	@git status | grep "On branch master" 2>&1 >/dev/null || echo "Check should be done on master branch only. Skipping."
   259  	@for tag in $$(git tag | grep -E "^v[0-9]+\.[0-9]+\.[0-9]+$$" | sed 's|v||' | sort -g); do \
   260  		state="MISSING"; \
   261  		grep "^v $$tag" CHANGELOG.md 2>&1 >/dev/null; \
   262  		[ "$$?" -eq 1 ] || state="OK"; \
   263  		echo "$$tag:   \t $$state"; \
   264  	done
   265  
   266  update_feature_flags_docs: $(GOPATH_SETUP)
   267  	go run ./scripts/update-feature-flags-docs/main.go
   268  
   269  development_setup:
   270  	test -d tmp/gitlab-test || git clone https://gitlab.com/gitlab-org/ci-cd/tests/gitlab-test.git tmp/gitlab-test
   271  	if prlctl --version ; then $(MAKE) -C tests/ubuntu parallels ; fi
   272  	if vboxmanage --version ; then $(MAKE) -C tests/ubuntu virtualbox ; fi
   273  
   274  dep_check: $(DEP)
   275  	@cd $(PKG_BUILD_DIR) && $(DEP) check
   276  
   277  dep_status: $(DEP)
   278  	@./scripts/dep_status_check $(PKG_BUILD_DIR)
   279  
   280  # local GOPATH
   281  $(GOPATH_SETUP): $(PKG_BUILD_DIR)
   282  	mkdir -p $(GOPATH_BIN)
   283  	touch $@
   284  
   285  $(PKG_BUILD_DIR):
   286  	mkdir -p $(@D)
   287  	ln -s ../../../.. $@
   288  
   289  # development tools
   290  $(DEP): $(GOPATH_SETUP)
   291  	go get github.com/golang/dep/cmd/dep
   292  
   293  $(GOX): $(GOPATH_SETUP)
   294  	go get github.com/mitchellh/gox
   295  
   296  $(MOCKERY): $(GOPATH_SETUP)
   297  	go get github.com/vektra/mockery/.../
   298  
   299  clean:
   300  	-$(RM) -rf $(LOCAL_GOPATH)
   301  	-$(RM) -rf $(TARGET_DIR)