Skip to content

Commit 2dfdb0b

Browse files
committed
release workflow and cicd changes
1 parent c467e54 commit 2dfdb0b

File tree

3 files changed

+149
-12
lines changed

3 files changed

+149
-12
lines changed
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
name: Spectro Release
2+
run-name: Release for Cluster API CloudStack ${{ github.event.inputs.release_version }}
3+
on:
4+
workflow_dispatch:
5+
inputs:
6+
release_version:
7+
description: 'Cluster API Version to Build'
8+
required: true
9+
default: '0.0.0'
10+
rel_type:
11+
type: choice
12+
description: Type of release
13+
default: 'rc'
14+
options:
15+
- release
16+
- rc
17+
jobs:
18+
builder:
19+
runs-on: ubuntu-latest
20+
env:
21+
SPECTRO_VERSION: ${{ github.event.inputs.release_version }}
22+
LEGACY_REGISTRY: us-docker.pkg.dev/palette-images/palette/cluster-api-cloudstack
23+
FIPS_REGISTRY: us-docker.pkg.dev/palette-images-fips/palette/cluster-api-cloudstack
24+
steps:
25+
- uses: mukunku/[email protected]
26+
id: checkTag
27+
with:
28+
tag: v${{ github.event.inputs.release_version }}-spectro
29+
- if: ${{ steps.checkTag.outputs.exists == 'true' }}
30+
run: |
31+
echo "Tag already exists for v${{ github.event.inputs.release_version }}-spectro..."
32+
exit 1
33+
- if: ${{ github.event.inputs.rel_type == 'rc' }}
34+
run: |
35+
echo "LEGACY_REGISTRY=us-east1-docker.pkg.dev/spectro-images/dev/cluster-api-cloudstack" >> $GITHUB_ENV
36+
echo "FIPS_REGISTRY=us-east1-docker.pkg.dev/spectro-images/dev-fips/cluster-api-cloudstack" >> $GITHUB_ENV
37+
- uses: actions/checkout@v3
38+
- name: Set up Docker Buildx
39+
uses: docker/setup-buildx-action@v1
40+
- name: Login to dev private registry
41+
uses: docker/login-action@v1
42+
with:
43+
registry: ${{ secrets.DEV_REGISTRY_URL }}
44+
username: ${{ secrets.REGISTRY_USERNAME }}
45+
password: ${{ secrets.REGISTRY_PASSWORD }}
46+
- name: Build Image
47+
env:
48+
REGISTRY: ${{ env.LEGACY_REGISTRY }}
49+
run: |
50+
make docker-build-all
51+
make docker-push-all
52+
- name: Build Image - FIPS Mode
53+
env:
54+
FIPS_ENABLE: yes
55+
REGISTRY: ${{ env.FIPS_REGISTRY }}
56+
run: |
57+
make docker-build-all
58+
make docker-push-all
59+
- name: Create Release
60+
if: ${{ github.event.inputs.rel_type == 'release' }}
61+
id: create_release
62+
uses: actions/create-release@v1
63+
env:
64+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
65+
with:
66+
tag_name: v${{ github.event.inputs.release_version }}-spectro
67+
release_name: Release v${{ github.event.inputs.release_version }}-spectro
68+
body: |
69+
Release version v${{ github.event.inputs.release_version }}-spectro
70+
draft: false
71+
prerelease: false

Dockerfile

Lines changed: 44 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,47 @@
1-
# Use distroless as minimal base image to package the manager binary
2-
# Refer to https://github.com/GoogleContainerTools/distroless for more details
1+
ARG BUILDER_GOLANG_VERSION
2+
ARG ARCH
3+
4+
FROM --platform=$ARCH us-docker.pkg.dev/palette-images/build-base-images/golang:${BUILDER_GOLANG_VERSION}-alpine as toolchain
5+
6+
ARG goproxy=https://proxy.golang.org
7+
ENV GOPROXY=$goproxy
8+
9+
ARG CRYPTO_LIB
10+
ENV GOEXPERIMENT=${CRYPTO_LIB:+boringcrypto}
11+
12+
FROM toolchain as builder
13+
WORKDIR /workspace
14+
15+
RUN apk update
16+
RUN apk add git gcc g++ curl
17+
18+
COPY go.mod go.mod
19+
COPY go.sum go.sum
20+
21+
RUN --mount=type=cache,target=/root/.local/share/golang \
22+
--mount=type=cache,target=/go/pkg/mod \
23+
go mod download
24+
25+
COPY ./ ./
26+
27+
ARG ARCH
28+
ARG LDFLAGS
29+
RUN --mount=type=cache,target=/root/.cache/go-build \
30+
--mount=type=cache,target=/go/pkg/mod \
31+
--mount=type=cache,target=/root/.local/share/golang \
32+
if [ ${CRYPTO_LIB} ]; \
33+
then \
34+
GOARCH=${ARCH} go-build-fips.sh -a -o manager . ;\
35+
else \
36+
GOARCH=${ARCH} go-build-static.sh -a -o manager . ;\
37+
fi
38+
RUN if [ "${CRYPTO_LIB}" ]; then assert-static.sh manager; fi
39+
RUN if [ "${CRYPTO_LIB}" ]; then assert-fips.sh manager; fi
40+
41+
ENTRYPOINT [ "/start.sh", "/workspace/manager" ]
42+
343
FROM gcr.io/distroless/static:nonroot
444
WORKDIR /
5-
COPY bin/manager-linux-amd64 ./manager
45+
COPY --from=builder /workspace/manager .
646
USER 65532:65532
7-
8-
ENTRYPOINT ["/manager"]
47+
ENTRYPOINT ["/manager"]

Makefile

Lines changed: 34 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -42,17 +42,31 @@ STAGING_REGISTRY := gcr.io/k8s-staging-capi-cloudstack
4242
STAGING_BUCKET ?= artifacts.k8s-staging-capi-cloudstack.appspot.com
4343
BUCKET ?= $(STAGING_BUCKET)
4444
PROD_REGISTRY ?= registry.k8s.io/capi-cloudstack
45-
REGISTRY ?= $(STAGING_REGISTRY)
4645
RELEASE_TAG ?= $(shell git describe --abbrev=0 2>/dev/null)
4746
PULL_BASE_REF ?= $(RELEASE_TAG)
4847
RELEASE_ALIAS_TAG ?= $(PULL_BASE_REF)
4948

49+
BUILDER_GOLANG_VERSION ?= 1.23
50+
51+
FIPS_ENABLE ?= ""
52+
BUILD_ARGS = --build-arg CRYPTO_LIB=${FIPS_ENABLE} --build-arg BUILDER_GOLANG_VERSION=${BUILDER_GOLANG_VERSION}
53+
54+
RELEASE_LOC := release
55+
ifeq ($(FIPS_ENABLE),yes)
56+
RELEASE_LOC := release-fips
57+
endif
58+
59+
SPECTRO_VERSION ?= 4.7.0-dev
60+
TAG ?= v0.6.1-spectro-${SPECTRO_VERSION}
61+
ARCH ?= amd64
62+
ALL_ARCH = amd64 arm64
63+
64+
REGISTRY ?= us-east1-docker.pkg.dev/spectro-images/dev/$(USER)/${RELEASE_LOC}
65+
5066
# Image URL to use all building/pushing image targets
51-
REGISTRY ?= $(STAGING_REGISTRY)
5267
IMAGE_NAME ?= capi-cloudstack-controller
53-
TAG ?= dev
5468
CONTROLLER_IMG ?= $(REGISTRY)/$(IMAGE_NAME)
55-
IMG ?= $(CONTROLLER_IMG):$(TAG)
69+
IMG ?= $(CONTROLLER_IMG)-$(ARCH):$(TAG)
5670
IMG_LOCAL ?= localhost:5000/$(IMAGE_NAME):$(TAG)
5771
MANIFEST_FILE := infrastructure-components
5872
CONFIG_DIR := config
@@ -213,15 +227,28 @@ undeploy: $(KUSTOMIZE) ## Undeploy controller from the K8s cluster specified in
213227
# Using a flag file here as docker build doesn't produce a target file.
214228
DOCKER_BUILD_INPUTS=$(MANAGER_BIN_INPUTS) Dockerfile
215229
.PHONY: docker-build
216-
docker-build: generate-deepcopy generate-conversion build-for-docker .dockerflag.mk ## Build docker image containing the controller manager.
230+
docker-build: generate-deepcopy generate-conversion .dockerflag.mk ## Build docker image containing the controller manager.
217231
.dockerflag.mk: $(DOCKER_BUILD_INPUTS)
218-
docker build -t ${IMG} .
232+
docker buildx build --load --platform linux/${ARCH} ${BUILD_ARGS} --build-arg ARCH=$(ARCH) -t ${IMG} .
219233
@touch .dockerflag.mk
220234

235+
.PHONY: docker-build-all ## Build all the architecture docker images
236+
docker-build-all: $(addprefix docker-build-,$(ALL_ARCH))
237+
238+
docker-build-%:
239+
$(MAKE) ARCH=$* docker-build
240+
221241
.PHONY: docker-push
222242
docker-push: .dockerflag.mk ## Push docker image with the manager.
223243
docker push ${IMG}
224244

245+
.PHONY: docker-push-all ## Push all the architecture docker images
246+
docker-push-all: $(addprefix docker-push-,$(ALL_ARCH))
247+
$(MAKE) docker-push
248+
249+
docker-push-%:
250+
$(MAKE) ARCH=$* docker-push
251+
225252
##@ Tilt
226253
## --------------------------------------
227254
## Tilt Development
@@ -358,4 +385,4 @@ release-templates: ## Generate release templates
358385

359386
.PHONY: upload-staging-artifacts
360387
upload-staging-artifacts: ## Upload release artifacts to the staging bucket
361-
gsutil cp $(RELEASE_DIR)/* gs://$(STAGING_BUCKET)/components/$(RELEASE_ALIAS_TAG)/
388+
gsutil cp $(RELEASE_DIR)/* gs://$(STAGING_BUCKET)/components/$(RELEASE_ALIAS_TAG)/

0 commit comments

Comments
 (0)