From 1b1b03d46eb035d61a6f9b10b9ab0a0032bde7ea Mon Sep 17 00:00:00 2001 From: Evan Lezar Date: Wed, 10 Jul 2024 13:21:46 +0200 Subject: [PATCH] [no-relnotes] Use a local development image Signed-off-by: Evan Lezar --- .github/dependabot.yml | 7 +++ .github/workflows/golang.yaml | 50 +++++++++++-------- Makefile | 11 ++++ deployments/devel/Dockerfile | 27 ++++++++++ deployments/devel/Makefile | 36 +++++++++++++ deployments/devel/go.mod | 10 ++++ deployments/devel/go.sum | 10 ++++ .../Dockerfile.golang => devel/tools.go} | 16 ++++-- hack/golang-version.sh | 4 +- versions.mk | 2 +- 10 files changed, 144 insertions(+), 29 deletions(-) create mode 100644 deployments/devel/Dockerfile create mode 100644 deployments/devel/Makefile create mode 100644 deployments/devel/go.mod create mode 100644 deployments/devel/go.sum rename deployments/{container/Dockerfile.golang => devel/tools.go} (76%) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 2adf8f17..c9bd394e 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -42,6 +42,13 @@ updates: - dependencies - maintenance + - package-ecosystem: "gomod" + target-branch: main + directory: "deployments/devel" + schedule: + interval: "weekly" + day: "sunday" + - package-ecosystem: "github-actions" directory: "/" schedule: diff --git a/.github/workflows/golang.yaml b/.github/workflows/golang.yaml index 93614c29..34b1caf7 100644 --- a/.github/workflows/golang.yaml +++ b/.github/workflows/golang.yaml @@ -51,26 +51,34 @@ jobs: - name: Check golang modules run: make check-vendor test: - name: Unit test - runs-on: ubuntu-latest - steps: - - name: Checkout code - uses: actions/checkout@v4 - - name: Get Golang version - id: vars - run: | - GOLANG_VERSION=$(./hack/golang-version.sh) - echo "GOLANG_VERSION=${GOLANG_VERSION##GOLANG_VERSION := }" >> $GITHUB_ENV - - name: Install Go - uses: actions/setup-go@v5 - with: - go-version: ${{ env.GOLANG_VERSION }} - - run: make test - build: + name: Unit test runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 - name: Checkout code - - - name: Build - run: make docker-build + - name: Checkout code + uses: actions/checkout@v4 + - name: Get Golang version + id: vars + run: | + GOLANG_VERSION=$(./hack/golang-version.sh) + echo "GOLANG_VERSION=${GOLANG_VERSION##GOLANG_VERSION := }" >> $GITHUB_ENV + - name: Install Go + uses: actions/setup-go@v5 + with: + go-version: ${{ env.GOLANG_VERSION }} + - run: make test + build: + name: Build + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + - name: Get Golang version + id: vars + run: | + GOLANG_VERSION=$(./hack/golang-version.sh) + echo "GOLANG_VERSION=${GOLANG_VERSION##GOLANG_VERSION ?= }" >> $GITHUB_ENV + - name: Install Go + uses: actions/setup-go@v5 + with: + go-version: ${{ env.GOLANG_VERSION }} + - run: make build diff --git a/Makefile b/Makefile index e694f6ce..31a06d6f 100644 --- a/Makefile +++ b/Makefile @@ -112,6 +112,17 @@ coverage: test generate: go generate $(MODULE)/... +# Generate an image for containerized builds +# Note: This image is local only +.PHONY: .build-image +.build-image: + make -f deployments/devel/Makefile .build-image + +ifeq ($(BUILD_DEVEL_IMAGE),yes) +$(DOCKER_TARGETS): .build-image +.shell: .build-image +endif + $(DOCKER_TARGETS): docker-%: @echo "Running 'make $(*)' in container image $(BUILDIMAGE)" $(DOCKER) run \ diff --git a/deployments/devel/Dockerfile b/deployments/devel/Dockerfile new file mode 100644 index 00000000..e15961ed --- /dev/null +++ b/deployments/devel/Dockerfile @@ -0,0 +1,27 @@ +# Copyright (c) 2024, NVIDIA CORPORATION. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# This Dockerfile is also used to define the golang version used in this project +# This allows dependabot to manage this version in addition to other images. +FROM golang:1.22.1 + +WORKDIR /work +COPY * . + +RUN make install-tools + +# We need to set the /work directory as a safe directory. +# This allows git commands to run in the container. +RUN git config --file=/.gitconfig --add safe.directory /work + diff --git a/deployments/devel/Makefile b/deployments/devel/Makefile new file mode 100644 index 00000000..2daef226 --- /dev/null +++ b/deployments/devel/Makefile @@ -0,0 +1,36 @@ +# Copyright 2024 NVIDIA CORPORATION +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +download: + @echo Download go.mod dependencies + @go mod download + +install-tools: download + @echo Installing tools from tools.go + @cat tools.go | grep _ | awk -F'"' '{print $$2}' | xargs -tI % go install % + + +DOCKER ?= docker +-include $(CURDIR)/versions.mk + +DOCKERFILE_DEVEL = deployments/devel/Dockerfile +DOCKERFILE_CONTEXT = deployments/devel + +.PHONY: .build-image +.build-image: + $(DOCKER) build \ + --progress=plain \ + --tag $(BUILDIMAGE) \ + -f $(DOCKERFILE_DEVEL) \ + $(DOCKERFILE_CONTEXT) diff --git a/deployments/devel/go.mod b/deployments/devel/go.mod new file mode 100644 index 00000000..6ab6fc7c --- /dev/null +++ b/deployments/devel/go.mod @@ -0,0 +1,10 @@ +module github.com/NVIDIA/k8s-device-plugin/deployments/devel + +go 1.22 + +require github.com/matryer/moq v0.3.4 + +require ( + golang.org/x/mod v0.14.0 // indirect + golang.org/x/tools v0.17.0 // indirect +) diff --git a/deployments/devel/go.sum b/deployments/devel/go.sum new file mode 100644 index 00000000..7c2fe382 --- /dev/null +++ b/deployments/devel/go.sum @@ -0,0 +1,10 @@ +github.com/matryer/moq v0.3.4 h1:czCFIos9rI2tyOehN9ktc/6bQ76N9J4xQ2n3dk063ac= +github.com/matryer/moq v0.3.4/go.mod h1:wqm9QObyoMuUtH81zFfs3EK6mXEcByy+TjvSROOXJ2U= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +golang.org/x/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0= +golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ= +golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/tools v0.17.0 h1:FvmRgNOcs3kOa+T20R1uhfP9F6HgG2mfxDv1vrx1Htc= +golang.org/x/tools v0.17.0/go.mod h1:xsh6VxdV005rRVaS6SSAf9oiAqljS7UZUacMZ8Bnsps= diff --git a/deployments/container/Dockerfile.golang b/deployments/devel/tools.go similarity index 76% rename from deployments/container/Dockerfile.golang rename to deployments/devel/tools.go index 6fffe44d..9ed772bd 100644 --- a/deployments/container/Dockerfile.golang +++ b/deployments/devel/tools.go @@ -1,3 +1,7 @@ +//go:build tools +// +build tools + +/** # Copyright 2024 NVIDIA CORPORATION # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -11,9 +15,11 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. +**/ -# This Dockerfile is used to define the golang version used in this -# project. -# This allows dependabot to manage this version in addition to other -# images. -FROM golang:1.22.1 +package main + +// Define the tooling required to build the device plugin. +import ( + _ "github.com/matryer/moq" +) diff --git a/hack/golang-version.sh b/hack/golang-version.sh index a8f107eb..b1bdf5b8 100755 --- a/hack/golang-version.sh +++ b/hack/golang-version.sh @@ -15,8 +15,8 @@ SCRIPTS_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )"/../scripts && pwd )" -DOCKERFILE_ROOT=${SCRIPTS_DIR}/../deployments/container +DOCKERFILE_ROOT=${SCRIPTS_DIR}/../deployments/devel -GOLANG_VERSION=$(grep -E "^FROM golang:.*$" ${DOCKERFILE_ROOT}/Dockerfile.golang | grep -oE "[0-9\.]+") +GOLANG_VERSION=$(grep -E "^FROM golang:.*$" ${DOCKERFILE_ROOT}/Dockerfile | grep -oE "[0-9\.]+") echo $GOLANG_VERSION diff --git a/versions.mk b/versions.mk index 74a1847d..f15ef9a2 100644 --- a/versions.mk +++ b/versions.mk @@ -24,7 +24,7 @@ PACKAGE_REVISION := 1 GOLANG_VERSION := $(shell ./hack/golang-version.sh) BUILDIMAGE_TAG ?= devel-go$(GOLANG_VERSION) -BUILDIMAGE ?= ghcr.io/nvidia/k8s-test-infra:$(BUILDIMAGE_TAG) +BUILDIMAGE ?= $(LIB_NAME):$(BUILDIMAGE_TAG) GIT_COMMIT ?= $(shell git describe --match="" --dirty --long --always --abbrev=40 2> /dev/null || echo "") GIT_COMMIT_SHORT ?= $(shell git rev-parse --short HEAD 2> /dev/null || echo "")