-
Notifications
You must be signed in to change notification settings - Fork 38
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #216 from pjbgf/refactor
Refactor build, test and release logic
- Loading branch information
Showing
17 changed files
with
338 additions
and
244 deletions.
There are no files selected for viewing
This file was deleted.
Oops, something went wrong.
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
name: Release | ||
|
||
on: | ||
push: | ||
tags: | ||
- 'v*' | ||
|
||
# GitHub settings / example values: | ||
# | ||
# org level vars: | ||
# - PUBLIC_REGISTRY: docker.io | ||
# repo level vars: | ||
# - PUBLIC_REGISTRY_REPO: rancher | ||
# repo level secrets: | ||
# - PUBLIC_REGISTRY_USERNAME | ||
# - PUBLIC_REGISTRY_PASSWORD | ||
|
||
permissions: | ||
contents: write # Upload artefacts to release. | ||
|
||
jobs: | ||
|
||
publish-public: | ||
runs-on: ubuntu-latest | ||
|
||
steps: | ||
- name: Login to DockerHub | ||
uses: docker/login-action@v3 | ||
with: | ||
registry: ${{ vars.PUBLIC_REGISTRY }} | ||
username: ${{ secrets.PUBLIC_REGISTRY_USERNAME }} | ||
password: ${{ secrets.PUBLIC_REGISTRY_PASSWORD }} | ||
- name: Setup QEMU | ||
uses: docker/setup-qemu-action@v3 | ||
- name: Setup Docker Buildx | ||
uses: docker/setup-buildx-action@v3 | ||
- name: Checkout code | ||
uses: actions/checkout@v4 | ||
|
||
- name: Build and push all image variations | ||
run: | | ||
make image-push | ||
TAG="${TAG}-amd64" TARGET_PLATFORMS=linux/amd64 make image-push | ||
TAG="${TAG}-arm64" TARGET_PLATFORMS=linux/arm64 make image-push | ||
TAG="${TAG}-s390x" TARGET_PLATFORMS=linux/s390x make image-push | ||
env: | ||
TAG: ${{ github.ref_name }} | ||
REPO: ${{ vars.PUBLIC_REGISTRY }}/${{ vars.PUBLIC_REGISTRY_REPO }} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
name: Tests | ||
|
||
on: | ||
push: | ||
pull_request: | ||
|
||
permissions: | ||
contents: read | ||
|
||
jobs: | ||
validate: | ||
runs-on: ubuntu-latest | ||
steps: | ||
- name: Checkout code | ||
uses: actions/checkout@v4 | ||
|
||
- run: make validate | ||
|
||
test: | ||
|
||
runs-on: ubuntu-latest | ||
needs: [ validate ] | ||
|
||
steps: | ||
- name: Checkout code | ||
uses: actions/checkout@v4 | ||
- name: Setup QEMU | ||
uses: docker/setup-qemu-action@v3 | ||
- name: Setup Docker Buildx | ||
uses: docker/setup-buildx-action@v3 | ||
|
||
- run: make test |
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,15 +1,53 @@ | ||
TARGETS := $(shell ls scripts) | ||
# To avoid poluting the Makefile, versions and checksums for tooling and | ||
# dependencies are defined at hack/make/deps.mk. | ||
include hack/make/deps.mk | ||
|
||
.dapper: | ||
@echo Downloading dapper | ||
@curl -sL https://releases.rancher.com/dapper/latest/dapper-$$(uname -s)-$$(uname -m) > .dapper.tmp | ||
@@chmod +x .dapper.tmp | ||
@./.dapper.tmp -v | ||
@mv .dapper.tmp .dapper | ||
# Include logic that can be reused across projects. | ||
include hack/make/build.mk | ||
|
||
$(TARGETS): .dapper | ||
./.dapper $@ | ||
# Define target platforms, image builder and the fully qualified image name. | ||
TARGET_PLATFORMS ?= linux/amd64,linux/arm64,linux/s390x | ||
|
||
REPO ?= rancher | ||
IMAGE = $(REPO)/shell:$(TAG) | ||
BUILD_ACTION = --load | ||
|
||
.DEFAULT_GOAL := ci | ||
ci: test validate e2e ## run the targets needed to validate a PR in CI. | ||
|
||
clean: ## clean up project. | ||
rm -rf build | ||
|
||
test: test-build ## test the build against all target platforms. | ||
$(MAKE) image-build | ||
IMAGE=$(IMAGE) \ | ||
KUBECTL_VERSION=$(KUBECTL_VERSION) HELM_VERSION=$(HELM_VERSION) \ | ||
KUSTOMIZE_VERSION=$(KUSTOMIZE_VERSION) K9S_VERSION=$(K9S_VERSION) \ | ||
./hack/test | ||
|
||
test-build: | ||
# Instead of loading image, target all platforms, effectivelly testing | ||
# the build for the target architectures. | ||
$(MAKE) image-build BUILD_ACTION="--platform=$(TARGET_PLATFORMS)" | ||
|
||
image-build: buildx-machine ## build (and load) the container image targeting the current platform. | ||
$(IMAGE_BUILDER) build -f package/Dockerfile \ | ||
--builder $(MACHINE) $(IMAGE_ARGS) \ | ||
--build-arg VERSION=$(VERSION) -t "$(IMAGE)" $(BUILD_ACTION) . | ||
@echo "Built $(IMAGE)" | ||
|
||
image-push: buildx-machine ## build the container image targeting all platforms defined by TARGET_PLATFORMS and push to a registry. | ||
$(IMAGE_BUILDER) build -f package/Dockerfile \ | ||
--builder $(MACHINE) $(IMAGE_ARGS) $(IID_FILE_FLAG) $(BUILDX_ARGS) \ | ||
--build-arg VERSION=$(VERSION) --platform=$(TARGET_PLATFORMS) -t "$(IMAGE)" --push . | ||
@echo "Pushed $(IMAGE)" | ||
|
||
validate: validate-dirty ## Run validation checks. | ||
|
||
.PHONY: $(TARGETS) | ||
validate-dirty: | ||
ifdef DIRTY | ||
@echo Git is dirty | ||
@git --no-pager status | ||
@git --no-pager diff | ||
@exit 1 | ||
endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,53 @@ | ||
ifeq ($(VERSION),) | ||
# Define VERSION, which is used for image tags or to bake it into the | ||
# compiled binary to enable the printing of the application version, | ||
# via the --version flag. | ||
CHANGES = $(shell git status --porcelain --untracked-files=no) | ||
ifneq ($(CHANGES),) | ||
DIRTY = -dirty | ||
endif | ||
|
||
# Prioritise DRONE_TAG for backwards compatibility. However, the git tag | ||
# command should be able to gather the current tag, except when the git | ||
# clone operation was done with "--no-tags". | ||
ifneq ($(DRONE_TAG),) | ||
GIT_TAG = $(DRONE_TAG) | ||
else | ||
GIT_TAG = $(shell git tag -l --contains HEAD | head -n 1) | ||
endif | ||
|
||
COMMIT = $(shell git rev-parse --short HEAD) | ||
VERSION = $(COMMIT)$(DIRTY) | ||
|
||
# Override VERSION with the Git tag if the current HEAD has a tag pointing to | ||
# it AND the worktree isn't dirty. | ||
ifneq ($(GIT_TAG),) | ||
ifeq ($(DIRTY),) | ||
VERSION = $(GIT_TAG) | ||
endif | ||
endif | ||
endif | ||
|
||
RUNNER := docker | ||
IMAGE_BUILDER := $(RUNNER) buildx | ||
MACHINE := rancher | ||
|
||
ifeq ($(TAG),) | ||
TAG = $(VERSION) | ||
ifneq ($(DIRTY),) | ||
TAG = dev | ||
endif | ||
endif | ||
|
||
# Define the target platforms that can be used across the ecosystem. | ||
# Note that what would actually be used for a given project will be | ||
# defined in TARGET_PLATFORMS, and must be a subset of the below: | ||
DEFAULT_PLATFORMS := linux/amd64,linux/arm64,linux/x390s,linux/riscv64 | ||
|
||
.PHONY: help | ||
help: ## display Makefile's help. | ||
@awk 'BEGIN {FS = ":.*##"; printf "\nUsage:\n make \033[36m<target>\033[0m\n"} /^[a-zA-Z_0-9-]+:.*?##/ { printf " \033[36m%-15s\033[0m %s\n", $$1, $$2 } /^##@/ { printf "\n\033[1m%s\033[0m\n", substr($$0, 5) } ' $(MAKEFILE_LIST) | ||
|
||
buildx-machine: ## create rancher dockerbuildx machine targeting platform defined by DEFAULT_PLATFORMS. | ||
@docker buildx ls | grep $(MACHINE) || \ | ||
docker buildx create --name=$(MACHINE) --platform=$(DEFAULT_PLATFORMS) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
HELM_VERSION := release-v3.12.3 | ||
|
||
KUBECTL_VERSION := v1.26.9 | ||
# curl -L "https://dl.k8s.io/release/$KUBECTL_VERSION/bin/linux/arm64/kubectl.sha256" | ||
KUBECTL_SUM_arm64 := f945c63220b393ddf8df67d87e67ff74b7f56219a670dee38bc597a078588e90 | ||
# curl -L "https://dl.k8s.io/release/$KUBECTL_VERSION/bin/linux/amd64/kubectl.sha256" | ||
KUBECTL_SUM_amd64 := 98ea4a13895e54ba24f57e0d369ff6be0d3906895305d5390197069b1da12ae2 | ||
# curl -L "https://dl.k8s.io/release/$KUBECTL_VERSION/bin/linux/s390x/kubectl.sha256" | ||
KUBECTL_SUM_s390x := 6c3f1cac8d70286eb4a661d783558101b9e4891e7997f744183506466a03625f | ||
|
||
KUSTOMIZE_VERSION := v5.3.0 | ||
# curl -L "https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize%2F$KUSTOMIZE_VERSION/checksums.txt" | ||
KUSTOMIZE_SUM_arm64 := a1ec622d4adeb483e3cdabd70f0d66058b1e4bcec013c4f74f370666e1e045d8 | ||
KUSTOMIZE_SUM_amd64 := 3ab32f92360d752a2a53e56be073b649abc1e7351b912c0fb32b960d1def854c | ||
KUSTOMIZE_SUM_s390x := 0b1a00f0e33efa2ecaa6cda9eeb63141ddccf97a912425974d6b65e66cf96cd4 | ||
|
||
K9S_VERSION := v0.31.7 | ||
# curl -L "https://github.com/derailed/k9s/releases/download/$K9S_VERSION/checksums.sha256" | ||
K9S_SUM_arm64 := 7310ca3d6d8f359457baeda2b0bc62571b7a0e068fe07275a774e7b2a9b54243 | ||
K9S_SUM_amd64 := 10a01834fca8a1c6613ae3ed17ce22575e1d2f4ffb1dd344866df533ed2d2539 | ||
K9S_SUM_s390x := 9c6b7537777b428346e72c8f9666bbdb320a71d981052b8750af60e740db98d8 | ||
|
||
# Reduces the code duplication on Makefile by keeping all args into a single variable. | ||
IMAGE_ARGS := --build-arg HELM_VERSION=$(HELM_VERSION) \ | ||
--build-arg KUBECTL_VERSION=$(KUBECTL_VERSION) --build-arg KUBECTL_SUM_arm64=$(KUBECTL_SUM_arm64) --build-arg KUBECTL_SUM_amd64=$(KUBECTL_SUM_amd64) --build-arg KUBECTL_SUM_s390x=$(KUBECTL_SUM_s390x) \ | ||
--build-arg KUSTOMIZE_VERSION=$(KUSTOMIZE_VERSION) --build-arg KUSTOMIZE_SUM_arm64=$(KUSTOMIZE_SUM_arm64) --build-arg KUSTOMIZE_SUM_amd64=$(KUSTOMIZE_SUM_amd64) --build-arg KUSTOMIZE_SUM_s390x=$(KUSTOMIZE_SUM_s390x) \ | ||
--build-arg K9S_VERSION=$(K9S_VERSION) --build-arg K9S_SUM_arm64=$(K9S_SUM_arm64) --build-arg K9S_SUM_amd64=$(K9S_SUM_amd64) --build-arg K9S_SUM_s390x=$(K9S_SUM_s390x) |
Oops, something went wrong.