diff --git a/.github/workflows/build-k3s.yaml b/.github/workflows/build-k3s.yaml index eeef200cc744..b194acdd28b7 100644 --- a/.github/workflows/build-k3s.yaml +++ b/.github/workflows/build-k3s.yaml @@ -70,7 +70,7 @@ jobs: uses: docker/build-push-action@v6 with: context: . - file: ./Dockerfile.local + file: ./Dockerfile target: result # Defined actions like this don't ingest GITHUB_ENV, so use outputs # and manual set the build arguments @@ -92,7 +92,7 @@ jobs: uses: docker/build-push-action@v6 with: context: . - file: ./Dockerfile.local + file: ./Dockerfile target: result build-args: | GIT_TAG=${{ steps.git_vars.outputs.git_tag }} diff --git a/.github/workflows/trivy-trigger.yml b/.github/workflows/trivy-trigger.yml index f58652abdd44..6f3e06fa77ff 100644 --- a/.github/workflows/trivy-trigger.yml +++ b/.github/workflows/trivy-trigger.yml @@ -50,7 +50,7 @@ jobs: - name: Build And Save K3s Image run: | - make local-image + make image make tag-image-latest docker save -o k3s.tar rancher/k3s:latest diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index c797447bf9cf..76ee45df6b88 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -73,5 +73,5 @@ go install golang.org/x/tools/cmd/goimports@latest then run: ``` -make format +make validate ``` diff --git a/Dockerfile.local b/Dockerfile similarity index 98% rename from Dockerfile.local rename to Dockerfile index baa4eb652f61..b6f731d07be1 100644 --- a/Dockerfile.local +++ b/Dockerfile @@ -4,7 +4,7 @@ FROM ${GOLANG} AS infra RUN apk -U --no-cache add bash git gcc musl-dev docker vim less file curl wget ca-certificates jq linux-headers \ zlib-dev tar zip squashfs-tools npm coreutils openssl-dev libffi-dev libseccomp libseccomp-dev \ libseccomp-static make libuv-static sqlite-dev sqlite-static libselinux libselinux-dev zlib-dev zlib-static \ - zstd pigz alpine-sdk binutils-gold btrfs-progs-dev btrfs-progs-static gawk yq pipx \ + zstd pigz alpine-sdk binutils-gold btrfs-progs-dev btrfs-progs-static gawk yq pipx aws-cli \ && \ if [ "$(go env GOARCH)" = "amd64" ]; then \ apk -U --no-cache add mingw-w64-gcc; \ diff --git a/Dockerfile.dapper b/Dockerfile.dapper deleted file mode 100644 index 82881f5d39d7..000000000000 --- a/Dockerfile.dapper +++ /dev/null @@ -1,59 +0,0 @@ -ARG GOLANG=golang:1.25.5-alpine3.23 -FROM ${GOLANG} - -# Install necessary packages -RUN apk -U --no-cache add \ - bash git gcc musl-dev docker vim less file curl wget ca-certificates jq linux-headers \ - zlib-dev tar zip squashfs-tools npm coreutils python3 py3-pip openssl-dev libffi-dev libseccomp \ - libseccomp-dev libseccomp-static make libuv-static sqlite-dev sqlite-static libselinux \ - libselinux-dev zlib-dev zlib-static zstd pigz alpine-sdk binutils-gold btrfs-progs-dev \ - btrfs-progs-static gawk yq pipx \ - && [ "$(go env GOARCH)" = "amd64" ] && apk -U --no-cache add mingw-w64-gcc || true - -# Install AWS CLI -RUN PIPX_BIN_DIR=/usr/local/bin pipx install awscli - -# Install Trivy -ENV TRIVY_VERSION="0.59.0" -RUN case "$(go env GOARCH)" in \ - arm64) TRIVY_ARCH="ARM64" ;; \ - amd64) TRIVY_ARCH="64bit" ;; \ - s390x) TRIVY_ARCH="s390x" ;; \ - *) TRIVY_ARCH="" ;; \ - esac && \ - if [ -n "${TRIVY_ARCH}" ]; then \ - wget --no-verbose "https://github.com/aquasecurity/trivy/releases/download/v${TRIVY_VERSION}/trivy_${TRIVY_VERSION}_Linux-${TRIVY_ARCH}.tar.gz" \ - && tar -zxvf "trivy_${TRIVY_VERSION}_Linux-${TRIVY_ARCH}.tar.gz" \ - && mv trivy /usr/local/bin; \ - fi - -# Install goimports -RUN GOPROXY=direct go install golang.org/x/tools/cmd/goimports@gopls/v0.20.0 - -# Cleanup -RUN rm -rf /go/src /go/pkg - -# Install golangci-lint for amd64 -RUN if [ "$(go env GOARCH)" = "amd64" ]; then \ - curl -sL https://raw.githubusercontent.com/golangci/golangci-lint/refs/tags/v2.7.2/install.sh | sh -s -- v2.7.2; \ - fi - -# Set SELINUX environment variable -ARG SELINUX=true -ENV SELINUX=${SELINUX} - -# Set Dapper configuration variables -ENV DAPPER_RUN_ARGS="--privileged -v k3s-cache:/go/src/github.com/k3s-io/k3s/.cache -v trivy-cache:/root/.cache/trivy" \ - DAPPER_ENV="REPO TAG DRONE_TAG IMAGE_NAME SKIP_VALIDATE SKIP_IMAGE SKIP_AIRGAP AWS_SECRET_ACCESS_KEY AWS_ACCESS_KEY_ID GITHUB_TOKEN GOLANG GOCOVER GOOS DEBUG" \ - DAPPER_SOURCE="/go/src/github.com/k3s-io/k3s/" \ - DAPPER_OUTPUT="./bin ./dist ./build/out ./build/static ./pkg/static ./pkg/deploy" \ - DAPPER_DOCKER_SOCKET=true \ - CROSS=true \ - STATIC_BUILD=true -# Set $HOME separately because it refers to $DAPPER_SOURCE, set above -ENV HOME=${DAPPER_SOURCE} - -WORKDIR ${DAPPER_SOURCE} - -ENTRYPOINT ["./scripts/entry.sh"] -CMD ["ci"] diff --git a/Makefile b/Makefile index b6e7752ff17a..a18f421337fb 100644 --- a/Makefile +++ b/Makefile @@ -2,21 +2,6 @@ TARGETS := $(shell ls scripts | grep -v \\.sh) GO_FILES ?= $$(find . -name '*.go') SHELL := /bin/bash - -.dapper: - @echo Downloading dapper - @curl -sL https://releases.rancher.com/dapper/v0.6.0/dapper-$$(uname -s)-$$(uname -m) > .dapper.tmp - @@chmod +x .dapper.tmp - @./.dapper.tmp -v - @mv .dapper.tmp .dapper - -.PHONY: docker.sock -docker.sock: - while ! docker version 1>/dev/null; do sleep 1; done - -$(TARGETS): .dapper docker.sock - ./.dapper $@ - .PHONY: deps deps: go mod tidy @@ -26,7 +11,8 @@ release: .DEFAULT_GOAL := ci -.PHONY: $(TARGETS) +.PHONY: ci +ci: binary image airgap build/data: mkdir -p $@ @@ -44,16 +30,16 @@ format: goimports -w $(GO_FILES) -.PHONY: local-validate -local-validate: +.PHONY: validate +validate: DOCKER_BUILDKIT=1 docker build \ --build-arg="SKIP_VALIDATE=$(SKIP_VALIDATE)" \ --build-arg="DEBUG=$(DEBUG)" \ --progress=plain \ - -f Dockerfile.local --target=validate . + -f Dockerfile --target=validate . -.PHONY: local-binary -local-binary: +.PHONY: binary +binary: @echo "INFO: Building K3s binaries and assets..." . ./scripts/git_version.sh && \ DOCKER_BUILDKIT=1 docker build \ @@ -64,17 +50,25 @@ local-binary: --build-arg="GOCOVER=$(GOCOVER)" \ --build-arg="GOOS=$(GOOS)" \ --build-arg="DEBUG=$(DEBUG)" \ - -f Dockerfile.local --target=result --output=. . + -f Dockerfile --target=result --output=. . -.PHONY: local-image -local-image: local-binary +.PHONY: image +image: binary @echo "INFO: Building K3s image..." ./scripts/package-image -.PHONY: local-airgap -local-airgap: +.PHONY: airgap +airgap: @echo "INFO: Building K3s airgap tarball..." ./scripts/package-airgap -.PHONY: local-ci -local-ci: local-binary local-image local-airgap +BRANCH := $(shell git rev-parse --abbrev-ref HEAD | sed 's/\//-/g') +in-docker-%: ## Advanced: wraps any script in Docker environment, for example: in-docker-package-cli + mkdir -p ./bin/ ./dist ./build + docker buildx build -t k3s:$(BRANCH) --target infra - < Dockerfile + docker run --privileged --rm --network host \ + -v $${PWD}:/go/src/github.com/k3s-io/k3s -v /var/run/docker.sock:/var/run/docker.sock -v /tmp:/tmp -v k3s-pkg:/go/pkg -v k3s-cache:/root/.cache/go-build \ + -e GODEBUG -e CI -e GOCOVER -e REPO -e TAG -e GITHUB_ACTION_TAG -e KUBERNETES_VERSION -e IMAGE_NAME -e AWS_SECRET_ACCESS_KEY -e AWS_ACCESS_KEY_ID \ + -e DOCKER_PASSWORD -e DOCKER_USERNAME -e GH_TOKEN -e SKIP_VALIDATE -e SKIP_IMAGE -e SKIP_AIRGAP -e GITHUB_TOKEN \ + -e GIT_CONFIG_COUNT=1 -e GIT_CONFIG_KEY_0=safe.directory -e GIT_CONFIG_VALUE_0=/go/src/github.com/k3s-io/k3s \ + k3s:$(BRANCH) ./scripts/$* \ No newline at end of file diff --git a/scripts/clean b/scripts/clean index 0ff183077510..4ed7ca1ea125 100755 --- a/scripts/clean +++ b/scripts/clean @@ -2,4 +2,4 @@ cd $(dirname $0)/.. -rm -rf dist bin build k3s hyperkube kubectl +rm -rf dist bin build k3s kubectl ./pkg/deploy/embed/* ./pkg/static/embed/* ./pkg/data/embed/*