1
0
mirror of https://github.com/kubernetes/ingress-nginx.git synced 2025-02-06 09:44:13 +00:00

Reimplement kubectl plugin release workflow (#8812)

* Feat: reimplement kubectl plugin release system

This commit does the following changes:
- Add GitHub Actions pipeline for releasing the plugin
- Removes the build/build-plugin.sh and replaces this with GoReleaser
- Adds the use of krew-release-bot for automatically updating the krew
  release
- Removes the make target for build/build-plugin.sh

Signed-off-by: Ismayil Mirzali <ismayilmirzeli@gmail.com>

* Fix: pin github actions stages with commit sha

Signed-off-by: Ismayil Mirzali <ismayilmirzeli@gmail.com>

Signed-off-by: Ismayil Mirzali <ismayilmirzeli@gmail.com>
This commit is contained in:
Ismayil Mirzali 2022-08-12 07:22:43 +03:00 committed by GitHub
parent c85765a015
commit 1dc9d98833
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 107 additions and 147 deletions

37
.github/workflows/plugin.yaml vendored Normal file
View File

@ -0,0 +1,37 @@
name: kubectl plugin
on:
push:
branches:
- "main"
paths:
- "cmd/plugin/**"
tags:
- "v*"
jobs:
release-plugin:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # v3.0.2
with:
fetch-depth: 0
- name: Set up Go
uses: actions/setup-go@b22fbbc2921299758641fab08929b4ac52b32923 # v3.2.0
with:
go-version: 1.18
- name: Run GoReleaser
uses: goreleaser/goreleaser-action@68acf3b1adf004ac9c2f0a4259e85c5f66e99bef # v3.0.0
with:
version: latest
args: release --rm-dist
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Update new version in krew-index
uses: rajatjindal/krew-release-bot@92da038bbf995803124a8e50ebd438b2f37bbbb0 # v0.0.43
with:
krew_template_file: cmd/plugin/krew.yaml

29
.goreleaser.yaml Normal file
View File

@ -0,0 +1,29 @@
project_name: ingress-nginx
release:
github:
owner: kubernetes
name: ingress-nginx
builds:
- id: ingress-nginx
goos:
- darwin
- linux
- windows
goarch:
- arm64
- amd64
env:
- CGO_ENABLED=0
- GO111MODULE=on
main: cmd/plugin/main.go
binary: kubectl-ingress-nginx
ldflags: |
-s -w
-X k8s.io/ingress-nginx/version.COMMIT={{ .Commit }}
-X k8s.io/ingress-nginx/version.RELEASE={{ .Tag }}
archives:
- id: ingress-nginx
builds:
- ingress-nginx
name_template: "kubectl-{{ .ProjectName }}_{{ .Os }}_{{ .Arch }}"
format: tar.gz

View File

@ -127,18 +127,6 @@ build: ## Build ingress controller, debug tool and pre-stop hook.
build/build.sh
.PHONY: build-plugin
build-plugin: ## Build ingress-nginx krew plugin.
@build/run-in-docker.sh \
PKG=$(PKG) \
MAC_OS=$(MAC_OS) \
ARCH=$(ARCH) \
COMMIT_SHA=$(COMMIT_SHA) \
REPO_INFO=$(REPO_INFO) \
TAG=$(TAG) \
build/build-plugin.sh
.PHONY: clean
clean: ## Remove .gocache directory.
rm -rf bin/ .gocache/ .cache/

View File

@ -1,84 +0,0 @@
#!/bin/bash
# Copyright 2018 The Kubernetes Authors.
#
# 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.
if [ -n "$DEBUG" ]; then
set -x
fi
set -o errexit
set -o nounset
set -o pipefail
declare -a mandatory
mandatory=(
PKG
ARCH
COMMIT_SHA
REPO_INFO
TAG
)
missing=false
for var in "${mandatory[@]}"; do
if [[ -z "${!var:-}" ]]; then
echo "Environment variable $var must be set"
missing=true
fi
done
if [ "$missing" = true ]; then
exit 1
fi
export CGO_ENABLED=0
release=cmd/plugin/release
function build_for_arch(){
os=$1
arch=$2
extension=$3
echo "> building targets for ${os}-${arch}"
env GOOS="${os}" GOARCH="${arch}" go build \
${GOBUILD_FLAGS} \
-trimpath -ldflags="-buildid= -w -s \
-X ${PKG}/version.RELEASE=${TAG} \
-X ${PKG}/version.COMMIT=${COMMIT_SHA} \
-X ${PKG}/version.REPO=${REPO_INFO}" \
-o "${release}/kubectl-ingress_nginx${extension}" "${PKG}/cmd/plugin"
cp LICENSE ${release}
tar -C "${release}" -zcvf "${release}/kubectl-ingress_nginx-${os}-${arch}.tar.gz" "kubectl-ingress_nginx${extension}" LICENSE
rm "${release}/kubectl-ingress_nginx${extension}"
hash=$(sha256sum "${release}/kubectl-ingress_nginx-${os}-${arch}.tar.gz" | awk '{ print $1 }')
sed -i "s/%%%shasum_${os}_${arch}%%%/${hash}/g" "${release}/ingress-nginx.yaml"
}
rm -rf "${release}"
mkdir "${release}"
cp cmd/plugin/ingress-nginx.yaml.tmpl "${release}/ingress-nginx.yaml"
sed -i "s/%%%tag%%%/${TAG}/g" ${release}/ingress-nginx.yaml
echo "Generated targets in ${release} directory."
build_for_arch darwin amd64 ''
build_for_arch darwin arm64 ''
build_for_arch linux amd64 ''
build_for_arch windows amd64 '.exe'

View File

@ -1,51 +0,0 @@
apiVersion: krew.googlecontainertools.github.com/v1alpha2
kind: Plugin
metadata:
name: ingress-nginx
spec:
shortDescription: Interact with ingress-nginx
description: |
The official kubectl plugin for ingress-nginx.
version: %%%tag%%%
homepage: https://kubernetes.github.io/ingress-nginx/kubectl-plugin/
platforms:
- uri: https://github.com/kubernetes/ingress-nginx/releases/download/nginx-%%%tag%%%/kubectl-ingress_nginx-darwin-arm64.tar.gz
sha256: %%%shasum_darwin_arm64%%%
files:
- from: "*"
to: "."
bin: "./kubectl-ingress_nginx"
selector:
matchLabels:
os: darwin
arch: arm64
- uri: https://github.com/kubernetes/ingress-nginx/releases/download/nginx-%%%tag%%%/kubectl-ingress_nginx-darwin-amd64.tar.gz
sha256: %%%shasum_darwin_amd64%%%
files:
- from: "*"
to: "."
bin: "./kubectl-ingress_nginx"
selector:
matchLabels:
os: darwin
arch: amd64
- uri: https://github.com/kubernetes/ingress-nginx/releases/download/nginx-%%%tag%%%/kubectl-ingress_nginx-linux-amd64.tar.gz
sha256: %%%shasum_linux_amd64%%%
files:
- from: "*"
to: "."
bin: "./kubectl-ingress_nginx"
selector:
matchLabels:
os: linux
arch: amd64
- uri: https://github.com/kubernetes/ingress-nginx/releases/download/nginx-%%%tag%%%/kubectl-ingress_nginx-windows-amd64.tar.gz
sha256: %%%shasum_windows_amd64%%%
files:
- from: "*"
to: "."
bin: "./kubectl-ingress_nginx.exe"
selector:
matchLabels:
os: windows
arch: amd64

41
cmd/plugin/krew.yaml Normal file
View File

@ -0,0 +1,41 @@
apiVersion: krew.googlecontainertools.github.com/v1alpha2
kind: Plugin
metadata:
name: ingress-nginx
spec:
shortDescription: Interact with ingress-nginx
description: |
The official kubectl plugin for ingress-nginx.
version: {{ .TagName }}
homepage: https://kubernetes.github.io/ingress-nginx/kubectl-plugin/
platforms:
- selector:
matchLabels:
os: darwin
arch: arm64
{{addURIAndSha "https://github.com/kubernetes/ingress-nginx/releases/download/{{ .TagName }}/kubectl-ingress-nginx_darwin_arm64.tar.gz" .TagName }}
bin: kubectl-ingress-nginx
- selector:
matchLabels:
os: darwin
arch: amd64
{{addURIAndSha "https://github.com/kubernetes/ingress-nginx/releases/download/{{ .TagName }}/kubectl-ingress-nginx_darwin_amd64.tar.gz" .TagName }}
bin: kubectl-ingress-nginx
selector:
matchLabels:
os: linux
arch: amd64
{{addURIAndSha "https://github.com/kubernetes/ingress-nginx/releases/download/{{ .TagName }}/kubectl-ingress-nginx_linux_amd64.tar.gz" .TagName }}
bin: kubectl-ingress-nginx
- selector:
matchLabels:
os: linux
arch: arm64
{{addURIAndSha "https://github.com/kubernetes/ingress-nginx/releases/download/{{ .TagName }}/kubectl-ingress-nginx_linux_arm64.tar.gz" .TagName }}
bin: kubectl-ingress-nginx
- selector:
matchLabels:
os: windows
arch: amd64
{{addURIAndSha "https://github.com/kubernetes/ingress-nginx/releases/download/{{ .TagName }}/kubectl-ingress-nginx_windows_amd64.tar.gz" .TagName }}
bin: kubectl-ingress-nginx.exe