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)