Add simpler and faster debug Makefile target
This commit is contained in:
parent
819de02101
commit
27a7563e33
9 changed files with 48 additions and 34 deletions
2
.github/workflows/build.yaml
vendored
2
.github/workflows/build.yaml
vendored
|
@ -8,7 +8,7 @@ on:
|
||||||
env:
|
env:
|
||||||
GO_VERSION: 1.17
|
GO_VERSION: 1.17
|
||||||
CGO_ENABLED: 0
|
CGO_ENABLED: 0
|
||||||
PRE_TARGET: ""
|
IN_DOCKER: ""
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
|
|
||||||
|
|
2
.github/workflows/test-unit.yaml
vendored
2
.github/workflows/test-unit.yaml
vendored
|
@ -7,7 +7,7 @@ on:
|
||||||
|
|
||||||
env:
|
env:
|
||||||
GO_VERSION: 1.17
|
GO_VERSION: 1.17
|
||||||
PRE_TARGET: ""
|
IN_DOCKER: ""
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
|
|
||||||
|
|
2
.github/workflows/validate.yaml
vendored
2
.github/workflows/validate.yaml
vendored
|
@ -9,7 +9,7 @@ env:
|
||||||
GO_VERSION: 1.17
|
GO_VERSION: 1.17
|
||||||
GOLANGCI_LINT_VERSION: v1.44.0
|
GOLANGCI_LINT_VERSION: v1.44.0
|
||||||
MISSSPELL_VERSION: v0.3.4
|
MISSSPELL_VERSION: v0.3.4
|
||||||
PRE_TARGET: ""
|
IN_DOCKER: ""
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
|
|
||||||
|
|
|
@ -41,7 +41,7 @@ blocks:
|
||||||
commands:
|
commands:
|
||||||
- make pull-images
|
- make pull-images
|
||||||
- touch webui/static/index.html # Avoid generating webui
|
- touch webui/static/index.html # Avoid generating webui
|
||||||
- PRE_TARGET="" make binary
|
- IN_DOCKER="" make binary
|
||||||
- make test-integration
|
- make test-integration
|
||||||
- df -h
|
- df -h
|
||||||
epilogue:
|
epilogue:
|
||||||
|
@ -65,7 +65,7 @@ blocks:
|
||||||
value: 1.12.1
|
value: 1.12.1
|
||||||
- name: CODENAME
|
- name: CODENAME
|
||||||
value: "rocamadour"
|
value: "rocamadour"
|
||||||
- name: PRE_TARGET
|
- name: IN_DOCKER
|
||||||
value: ""
|
value: ""
|
||||||
prologue:
|
prologue:
|
||||||
commands:
|
commands:
|
||||||
|
|
50
Makefile
50
Makefile
|
@ -7,8 +7,6 @@ SHA := $(shell git rev-parse HEAD)
|
||||||
VERSION_GIT := $(if $(TAG_NAME),$(TAG_NAME),$(SHA))
|
VERSION_GIT := $(if $(TAG_NAME),$(TAG_NAME),$(SHA))
|
||||||
VERSION := $(if $(VERSION),$(VERSION),$(VERSION_GIT))
|
VERSION := $(if $(VERSION),$(VERSION),$(VERSION_GIT))
|
||||||
|
|
||||||
BIND_DIR := dist
|
|
||||||
|
|
||||||
GIT_BRANCH := $(subst heads/,,$(shell git rev-parse --abbrev-ref HEAD 2>/dev/null))
|
GIT_BRANCH := $(subst heads/,,$(shell git rev-parse --abbrev-ref HEAD 2>/dev/null))
|
||||||
TRAEFIK_DEV_IMAGE := traefik-dev$(if $(GIT_BRANCH),:$(subst /,-,$(GIT_BRANCH)))
|
TRAEFIK_DEV_IMAGE := traefik-dev$(if $(GIT_BRANCH),:$(subst /,-,$(GIT_BRANCH)))
|
||||||
|
|
||||||
|
@ -29,14 +27,14 @@ TRAEFIK_ENVS := \
|
||||||
-e CI \
|
-e CI \
|
||||||
-e CONTAINER=DOCKER # Indicator for integration tests that we are running inside a container.
|
-e CONTAINER=DOCKER # Indicator for integration tests that we are running inside a container.
|
||||||
|
|
||||||
TRAEFIK_MOUNT := -v "$(CURDIR)/$(BIND_DIR):/go/src/github.com/traefik/traefik/$(BIND_DIR)"
|
TRAEFIK_MOUNT := -v "$(CURDIR)/dist:/go/src/github.com/traefik/traefik/dist"
|
||||||
DOCKER_RUN_OPTS := $(TRAEFIK_ENVS) $(TRAEFIK_MOUNT) "$(TRAEFIK_DEV_IMAGE)"
|
DOCKER_RUN_OPTS := $(TRAEFIK_ENVS) $(TRAEFIK_MOUNT) "$(TRAEFIK_DEV_IMAGE)"
|
||||||
DOCKER_NON_INTERACTIVE ?= false
|
DOCKER_NON_INTERACTIVE ?= false
|
||||||
DOCKER_RUN_TRAEFIK := docker run $(INTEGRATION_OPTS) $(if $(DOCKER_NON_INTERACTIVE), , -it) $(DOCKER_RUN_OPTS)
|
DOCKER_RUN_TRAEFIK := docker run $(INTEGRATION_OPTS) $(if $(DOCKER_NON_INTERACTIVE), , -it) $(DOCKER_RUN_OPTS)
|
||||||
DOCKER_RUN_TRAEFIK_TEST := docker run --add-host=host.docker.internal:127.0.0.1 --rm --name=traefik --network traefik-test-network -v $(PWD):$(PWD) -w $(PWD) $(INTEGRATION_OPTS) $(if $(DOCKER_NON_INTERACTIVE), , -it) $(DOCKER_RUN_OPTS)
|
DOCKER_RUN_TRAEFIK_TEST := docker run --add-host=host.docker.internal:127.0.0.1 --rm --name=traefik --network traefik-test-network -v $(PWD):$(PWD) -w $(PWD) $(INTEGRATION_OPTS) $(if $(DOCKER_NON_INTERACTIVE), , -it) $(DOCKER_RUN_OPTS)
|
||||||
DOCKER_RUN_TRAEFIK_NOTTY := docker run $(INTEGRATION_OPTS) $(if $(DOCKER_NON_INTERACTIVE), , -i) $(DOCKER_RUN_OPTS)
|
DOCKER_RUN_TRAEFIK_NOTTY := docker run $(INTEGRATION_OPTS) $(if $(DOCKER_NON_INTERACTIVE), , -i) $(DOCKER_RUN_OPTS)
|
||||||
|
|
||||||
PRE_TARGET ?= build-dev-image
|
IN_DOCKER ?= true
|
||||||
|
|
||||||
PLATFORM_URL := $(if $(PLATFORM_URL),$(PLATFORM_URL),"https://pilot.traefik.io")
|
PLATFORM_URL := $(if $(PLATFORM_URL),$(PLATFORM_URL),"https://pilot.traefik.io")
|
||||||
|
|
||||||
|
@ -44,7 +42,7 @@ default: binary
|
||||||
|
|
||||||
## Build Dev Docker image
|
## Build Dev Docker image
|
||||||
build-dev-image: dist
|
build-dev-image: dist
|
||||||
docker build $(DOCKER_BUILD_ARGS) -t "$(TRAEFIK_DEV_IMAGE)" -f build.Dockerfile .
|
$(if $(IN_DOCKER),docker build $(DOCKER_BUILD_ARGS) -t "$(TRAEFIK_DEV_IMAGE)" -f build.Dockerfile .,)
|
||||||
|
|
||||||
## Build Dev Docker image without cache
|
## Build Dev Docker image without cache
|
||||||
build-dev-image-no-cache: dist
|
build-dev-image-no-cache: dist
|
||||||
|
@ -72,9 +70,13 @@ generate-webui:
|
||||||
docker run --rm -v "$$PWD/webui/static":'/src/webui/static' traefik-webui chown -R $(shell id -u):$(shell id -g) ./static; \
|
docker run --rm -v "$$PWD/webui/static":'/src/webui/static' traefik-webui chown -R $(shell id -u):$(shell id -g) ./static; \
|
||||||
fi
|
fi
|
||||||
|
|
||||||
## Build the linux binary
|
## Build the binary
|
||||||
binary: generate-webui $(PRE_TARGET)
|
binary: generate-webui build-dev-image
|
||||||
$(if $(PRE_TARGET),$(DOCKER_RUN_TRAEFIK)) ./script/make.sh generate binary
|
$(if $(IN_DOCKER),$(DOCKER_RUN_TRAEFIK)) ./script/make.sh generate binary
|
||||||
|
|
||||||
|
## Build the linux binary locally
|
||||||
|
binary-debug: generate-webui
|
||||||
|
GOOS=linux ./script/make.sh binary
|
||||||
|
|
||||||
## Build the binary for the standard platforms (linux, darwin, windows)
|
## Build the binary for the standard platforms (linux, darwin, windows)
|
||||||
crossbinary-default: generate-webui build-dev-image
|
crossbinary-default: generate-webui build-dev-image
|
||||||
|
@ -86,35 +88,35 @@ crossbinary-default-parallel:
|
||||||
$(MAKE) build-dev-image crossbinary-default
|
$(MAKE) build-dev-image crossbinary-default
|
||||||
|
|
||||||
## Run the unit and integration tests
|
## Run the unit and integration tests
|
||||||
test: $(PRE_TARGET)
|
test: build-dev-image
|
||||||
-docker network create traefik-test-network --driver bridge --subnet 172.31.42.0/24
|
-docker network create traefik-test-network --driver bridge --subnet 172.31.42.0/24
|
||||||
trap 'docker network rm traefik-test-network' EXIT; \
|
trap 'docker network rm traefik-test-network' EXIT; \
|
||||||
$(if $(PRE_TARGET),$(DOCKER_RUN_TRAEFIK_TEST),) ./script/make.sh generate test-unit binary test-integration
|
$(if $(IN_DOCKER),$(DOCKER_RUN_TRAEFIK_TEST),) ./script/make.sh generate test-unit binary test-integration
|
||||||
|
|
||||||
## Run the unit tests
|
## Run the unit tests
|
||||||
test-unit: $(PRE_TARGET)
|
test-unit: build-dev-image
|
||||||
-docker network create traefik-test-network --driver bridge --subnet 172.31.42.0/24
|
-docker network create traefik-test-network --driver bridge --subnet 172.31.42.0/24
|
||||||
trap 'docker network rm traefik-test-network' EXIT; \
|
trap 'docker network rm traefik-test-network' EXIT; \
|
||||||
$(if $(PRE_TARGET),$(DOCKER_RUN_TRAEFIK_TEST)) ./script/make.sh generate test-unit
|
$(if $(IN_DOCKER),$(DOCKER_RUN_TRAEFIK_TEST)) ./script/make.sh generate test-unit
|
||||||
|
|
||||||
## Run the integration tests
|
## Run the integration tests
|
||||||
test-integration: $(PRE_TARGET)
|
test-integration: build-dev-image
|
||||||
-docker network create traefik-test-network --driver bridge --subnet 172.31.42.0/24
|
-docker network create traefik-test-network --driver bridge --subnet 172.31.42.0/24
|
||||||
trap 'docker network rm traefik-test-network' EXIT; \
|
trap 'docker network rm traefik-test-network' EXIT; \
|
||||||
$(if $(PRE_TARGET),$(DOCKER_RUN_TRAEFIK_TEST),) ./script/make.sh generate binary test-integration
|
$(if $(IN_DOCKER),$(DOCKER_RUN_TRAEFIK_TEST),) ./script/make.sh generate binary test-integration
|
||||||
|
|
||||||
## Pull all images for integration tests
|
## Pull all images for integration tests
|
||||||
pull-images:
|
pull-images:
|
||||||
grep --no-filename -E '^\s+image:' ./integration/resources/compose/*.yml | awk '{print $$2}' | sort | uniq | xargs -P 6 -n 1 docker pull
|
grep --no-filename -E '^\s+image:' ./integration/resources/compose/*.yml | awk '{print $$2}' | sort | uniq | xargs -P 6 -n 1 docker pull
|
||||||
|
|
||||||
## Validate code and docs
|
## Validate code and docs
|
||||||
validate-files: $(PRE_TARGET)
|
validate-files: build-dev-image
|
||||||
$(if $(PRE_TARGET),$(DOCKER_RUN_TRAEFIK)) ./script/make.sh generate validate-lint validate-misspell
|
$(if $(IN_DOCKER),$(DOCKER_RUN_TRAEFIK)) ./script/make.sh generate validate-lint validate-misspell
|
||||||
bash $(CURDIR)/script/validate-shell-script.sh
|
bash $(CURDIR)/script/validate-shell-script.sh
|
||||||
|
|
||||||
## Validate code, docs, and vendor
|
## Validate code, docs, and vendor
|
||||||
validate: $(PRE_TARGET)
|
validate: build-dev-image
|
||||||
$(if $(PRE_TARGET),$(DOCKER_RUN_TRAEFIK)) ./script/make.sh generate validate-lint validate-misspell validate-vendor
|
$(if $(IN_DOCKER),$(DOCKER_RUN_TRAEFIK)) ./script/make.sh generate validate-lint validate-misspell validate-vendor
|
||||||
bash $(CURDIR)/script/validate-shell-script.sh
|
bash $(CURDIR)/script/validate-shell-script.sh
|
||||||
|
|
||||||
## Clean up static directory and build a Docker Traefik image
|
## Clean up static directory and build a Docker Traefik image
|
||||||
|
@ -125,6 +127,10 @@ build-image: clean-webui binary
|
||||||
build-image-dirty: binary
|
build-image-dirty: binary
|
||||||
docker build -t $(TRAEFIK_IMAGE) .
|
docker build -t $(TRAEFIK_IMAGE) .
|
||||||
|
|
||||||
|
## Locally build traefik for linux, then shove it an alpine image, with basic tools.
|
||||||
|
build-image-debug: binary-debug
|
||||||
|
docker build -t $(TRAEFIK_IMAGE) -f debug.Dockerfile .
|
||||||
|
|
||||||
## Start a shell inside the build env
|
## Start a shell inside the build env
|
||||||
shell: build-dev-image
|
shell: build-dev-image
|
||||||
$(DOCKER_RUN_TRAEFIK) /bin/bash
|
$(DOCKER_RUN_TRAEFIK) /bin/bash
|
||||||
|
@ -150,17 +156,17 @@ generate-genconf:
|
||||||
go run ./cmd/internal/gen/
|
go run ./cmd/internal/gen/
|
||||||
|
|
||||||
## Create packages for the release
|
## Create packages for the release
|
||||||
release-packages: generate-webui $(PRE_TARGET)
|
release-packages: generate-webui build-dev-image
|
||||||
rm -rf dist
|
rm -rf dist
|
||||||
$(if $(PRE_TARGET),$(DOCKER_RUN_TRAEFIK_NOTTY)) goreleaser release --skip-publish --timeout="90m"
|
$(if $(IN_DOCKER),$(DOCKER_RUN_TRAEFIK_NOTTY)) goreleaser release --skip-publish --timeout="90m"
|
||||||
$(if $(PRE_TARGET),$(DOCKER_RUN_TRAEFIK_NOTTY)) tar cfz dist/traefik-${VERSION}.src.tar.gz \
|
$(if $(IN_DOCKER),$(DOCKER_RUN_TRAEFIK_NOTTY)) tar cfz dist/traefik-${VERSION}.src.tar.gz \
|
||||||
--exclude-vcs \
|
--exclude-vcs \
|
||||||
--exclude .idea \
|
--exclude .idea \
|
||||||
--exclude .travis \
|
--exclude .travis \
|
||||||
--exclude .semaphoreci \
|
--exclude .semaphoreci \
|
||||||
--exclude .github \
|
--exclude .github \
|
||||||
--exclude dist .
|
--exclude dist .
|
||||||
$(if $(PRE_TARGET),$(DOCKER_RUN_TRAEFIK_NOTTY)) chown -R $(shell id -u):$(shell id -g) dist/
|
$(if $(IN_DOCKER),$(DOCKER_RUN_TRAEFIK_NOTTY)) chown -R $(shell id -u):$(shell id -g) dist/
|
||||||
|
|
||||||
## Format the Code
|
## Format the Code
|
||||||
fmt:
|
fmt:
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
FROM golang:1.17-alpine
|
FROM golang:1.17-alpine
|
||||||
|
|
||||||
RUN apk --update upgrade \
|
RUN apk --no-cache --no-progress add git mercurial bash gcc musl-dev curl tar ca-certificates tzdata \
|
||||||
&& apk --no-cache --no-progress add git mercurial bash gcc musl-dev curl tar ca-certificates tzdata \
|
|
||||||
&& update-ca-certificates \
|
&& update-ca-certificates \
|
||||||
&& rm -rf /var/cache/apk/*
|
&& rm -rf /var/cache/apk/*
|
||||||
|
|
||||||
|
@ -17,7 +16,7 @@ RUN mkdir -p /usr/local/bin \
|
||||||
RUN curl -sfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | bash -s -- -b $GOPATH/bin v1.44.0
|
RUN curl -sfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | bash -s -- -b $GOPATH/bin v1.44.0
|
||||||
|
|
||||||
# Download misspell binary to bin folder in $GOPATH
|
# Download misspell binary to bin folder in $GOPATH
|
||||||
RUN curl -sfL https://raw.githubusercontent.com/client9/misspell/master/install-misspell.sh | bash -s -- -b $GOPATH/bin v0.3.4
|
RUN curl -sfL https://raw.githubusercontent.com/client9/misspell/master/install-misspell.sh | bash -s -- -b $GOPATH/bin v0.3.4
|
||||||
|
|
||||||
# Download goreleaser binary to bin folder in $GOPATH
|
# Download goreleaser binary to bin folder in $GOPATH
|
||||||
RUN curl -sfL https://gist.githubusercontent.com/traefiker/6d7ac019c11d011e4f131bb2cca8900e/raw/goreleaser.sh | sh
|
RUN curl -sfL https://gist.githubusercontent.com/traefiker/6d7ac019c11d011e4f131bb2cca8900e/raw/goreleaser.sh | sh
|
||||||
|
|
10
debug.Dockerfile
Normal file
10
debug.Dockerfile
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
FROM alpine:3.14
|
||||||
|
# Feel free to add below any helpful dependency for debugging.
|
||||||
|
# iproute2 is for ss.
|
||||||
|
RUN apk --no-cache --no-progress add bash curl ca-certificates tzdata lsof iproute2 \
|
||||||
|
&& update-ca-certificates \
|
||||||
|
&& rm -rf /var/cache/apk/*
|
||||||
|
COPY dist/traefik /
|
||||||
|
EXPOSE 80
|
||||||
|
VOLUME ["/tmp"]
|
||||||
|
ENTRYPOINT ["/traefik"]
|
|
@ -45,7 +45,7 @@ $ ls dist/
|
||||||
traefik*
|
traefik*
|
||||||
```
|
```
|
||||||
|
|
||||||
The following targets can be executed outside Docker by setting the variable `PRE_TARGET` to an empty string (we don't recommend that):
|
The following targets can be executed outside Docker by setting the variable `IN_DOCKER` to an empty string (although be aware that some of the tests might fail in that context):
|
||||||
|
|
||||||
- `test-unit`
|
- `test-unit`
|
||||||
- `test-integration`
|
- `test-integration`
|
||||||
|
@ -55,7 +55,7 @@ The following targets can be executed outside Docker by setting the variable `PR
|
||||||
ex:
|
ex:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
PRE_TARGET= make test-unit
|
IN_DOCKER= make test-unit
|
||||||
```
|
```
|
||||||
|
|
||||||
### Method 2: Using `go`
|
### Method 2: Using `go`
|
||||||
|
|
|
@ -14,8 +14,7 @@ RUN npm run build
|
||||||
# BUILD
|
# BUILD
|
||||||
FROM golang:1.17-alpine as gobuild
|
FROM golang:1.17-alpine as gobuild
|
||||||
|
|
||||||
RUN apk --update upgrade \
|
RUN apk --no-cache --no-progress add git mercurial bash gcc musl-dev curl tar ca-certificates tzdata \
|
||||||
&& apk --no-cache --no-progress add git mercurial bash gcc musl-dev curl tar ca-certificates tzdata \
|
|
||||||
&& update-ca-certificates \
|
&& update-ca-certificates \
|
||||||
&& rm -rf /var/cache/apk/*
|
&& rm -rf /var/cache/apk/*
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue