Skip to content

Commit

Permalink
Merge pull request #778 from stakater/branch-release-strat
Browse files Browse the repository at this point in the history
Branch based release strategy
  • Loading branch information
MuneebAijaz authored Nov 15, 2024
2 parents 489a900 + 60a2f26 commit 32d5bb8
Show file tree
Hide file tree
Showing 12 changed files with 398 additions and 222 deletions.
69 changes: 69 additions & 0 deletions .github/workflows/init-branch-release.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
name: Init Release
on:
workflow_dispatch:
inputs:
TARGET_BRANCH:
description: 'TARGET_BRANCH on which release will be based'
required: true
type: string

TARGET_VERSION:
description: 'TARGET_VERSION to build kubernetes manifests with using Kustomize'
required: true
type: string

permissions: {}

jobs:
prepare-release:
permissions:
contents: write # for peter-evans/create-pull-request to create branch
pull-requests: write # for peter-evans/create-pull-request to create a PR
name: Automatically generate version and manifests on ${{ inputs.TARGET_BRANCH }}
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4.2
with:
fetch-depth: 0
token: ${{ secrets.GITHUB_TOKEN }}
ref: ${{ inputs.TARGET_BRANCH }}

- name: Check if TARGET_VERSION is well formed.
run: |
set -xue
# Target version must not contain 'v' prefix
if echo "${{ inputs.TARGET_VERSION }}" | grep -e '^v'; then
echo "::error::Target version '${{ inputs.TARGET_VERSION }}' should not begin with a 'v' prefix, refusing to continue." >&2
exit 1
fi
- name: Create VERSION information
run: |
set -ue
echo "Bumping version from $(cat VERSION) to ${{ inputs.TARGET_VERSION }}"
echo "${{ inputs.TARGET_VERSION }}" > VERSION
- name: Replace latest tag with version from input
run: |
set -ue
VERSION=${{ inputs.TARGET_VERSION }} make update-manifests-version
VERSION=${{ inputs.TARGET_VERSION }} make bump-chart
git diff
- name: Generate new set of manifests
run: |
set -ue
make k8s-manifests
git diff
- name: Create pull request
uses: peter-evans/create-pull-request@v7.0.5
with:
commit-message: "Bump version to ${{ inputs.TARGET_VERSION }}"
title: "Bump version to ${{ inputs.TARGET_VERSION }} on ${{ inputs.TARGET_BRANCH }} branch"
body: Updating VERSION and manifests to ${{ inputs.TARGET_VERSION }}
branch: update-version
branch-suffix: random
signoff: true
labels: release
79 changes: 75 additions & 4 deletions .github/workflows/pull_request.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ on:
pull_request:
branches:
- master
- 'v**'
paths:
- '**'
- '!.markdownlint.yaml'
Expand All @@ -17,8 +18,8 @@ on:
env:
DOCKER_FILE_PATH: Dockerfile
DOCKER_UBI_FILE_PATH: Dockerfile.ubi
KUBERNETES_VERSION: "1.19.0"
KIND_VERSION: "0.17.0"
KUBERNETES_VERSION: "1.30.0"
KIND_VERSION: "0.23.0"
REGISTRY: ghcr.io

jobs:
Expand Down Expand Up @@ -46,6 +47,8 @@ jobs:
# Setting up helm binary
- name: Set up Helm
uses: azure/setup-helm@v4
with:
version: v3.11.3

- name: Helm chart unit tests
uses: d3adb5/helm-unittest-action@v2
Expand Down Expand Up @@ -86,8 +89,7 @@ jobs:
run: |
curl -LO "https://storage.googleapis.com/kubernetes-release/release/v${KUBERNETES_VERSION}/bin/linux/amd64/kubectl"
sudo install ./kubectl /usr/local/bin/ && rm kubectl
kubectl version --short --client
kubectl version --short --client | grep -q ${KUBERNETES_VERSION}
kubectl version --client=true
- name: Install Kind
run: |
Expand Down Expand Up @@ -160,3 +162,72 @@ jobs:
org.opencontainers.image.source=${{ github.event.repository.clone_url }}
org.opencontainers.image.created=${{ steps.prep.outputs.created }}
org.opencontainers.image.revision=${{ github.sha }}
- name: Check if Helm validation needs to run
uses: dorny/paths-filter@v3
id: filter
with:
filters: |
chart:
- 'deployments/kubernetes/chart/reloader/**'
outputs:
helm_chart_changed: ${{ steps.filter.outputs.chart }}

helm-validation:
permissions:
contents: read

runs-on: ubuntu-latest
name: Helm Chart Validation
needs:
- build

if: ${{ needs.build.outputs.helm_chart_changed }} == "true"
steps:

- name: Check out code
uses: actions/checkout@v4
with:
ref: ${{github.event.pull_request.head.sha}}
fetch-depth: 0

# Setting up helm binary
- name: Set up Helm
uses: azure/setup-helm@v4
with:
version: v3.11.3

- name: Helm chart unit tests
uses: d3adb5/helm-unittest-action@v2
with:
charts: deployments/kubernetes/chart/reloader

- name: Add Stakater Helm Repo
run: |
helm repo add stakater https://stakater.github.io/stakater-charts
- name: Get version for chart from helm repo
id: chart_eval
run: |
current_chart_version=$(helm search repo stakater/reloader | tail -n 1 | awk '{print $2}')
echo "CURRENT_CHART_VERSION=$(echo ${current_chart_version})" >> $GITHUB_OUTPUT
- name: Get Updated Chart version from Chart.yaml
uses: mikefarah/yq@master
id: new_chart_version
with:
cmd: yq e '.version' deployments/kubernetes/chart/reloader/Chart.yaml

- name: Check Version
uses: aleoyakas/check-semver-increased-action@v1
id: check-version
with:
current-version: ${{ steps.new_chart_version.outputs.result }}
previous-version: ${{ steps.chart_eval.outputs.CURRENT_CHART_VERSION }}

- name: Fail if Helm Chart version isnt updated
if: steps.check-version.outputs.is-version-increased != 'true'
run: |
echo "Helm Chart Version wasnt updated"
exit 1
86 changes: 86 additions & 0 deletions .github/workflows/push-pr-image.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
name: Push PR Image on Label

on:
pull_request:
branches:
- master
types: [ labeled ]

env:
DOCKER_FILE_PATH: Dockerfile
REGISTRY: ghcr.io

jobs:

build-and-push-pr-image:
permissions:
contents: read

runs-on: ubuntu-latest
name: Build and Push PR Image
if: ${{ github.event.label.name == 'build-and-push-pr-image' }}
steps:
- name: Check out code
uses: actions/checkout@v4
with:
ref: ${{github.event.pull_request.head.sha}}
fetch-depth: 0

- name: Set up Go
uses: actions/setup-go@v5
with:
go-version-file: 'go.mod'
check-latest: true
cache: true

- name: Install Dependencies
run: |
make install
- name: Run golangci-lint
uses: golangci/golangci-lint-action@v5
with:
version: latest
only-new-issues: false
args: --timeout 10m

- name: Generate Tags
id: generate_tag
run: |
sha=${{ github.event.pull_request.head.sha }}
tag="SNAPSHOT-PR-${{ github.event.pull_request.number }}-${sha:0:8}"
echo "GIT_TAG=$(echo ${tag})" >> $GITHUB_OUTPUT
- name: Set up QEMU
uses: docker/setup-qemu-action@v3

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Generate image repository path for ghcr registry
run: |
echo GHCR_IMAGE_REPOSITORY=${{env.REGISTRY}}/$(echo ${{ github.repository }} | tr '[:upper:]' '[:lower:]') >> $GITHUB_ENV
- name: Login to ghcr registry
uses: docker/login-action@v3
with:
registry: ${{env.REGISTRY}}
username: stakater-user
password: ${{secrets.GITHUB_TOKEN}}

- name: Build Docker Image
uses: docker/build-push-action@v6
with:
context: .
file: ${{ env.DOCKER_FILE_PATH }}
pull: true
push: true
build-args: BUILD_PARAMETERS=${{ env.BUILD_PARAMETERS }}
cache-to: type=inline
platforms: linux/amd64,linux/arm,linux/arm64
tags: |
${{ env.GHCR_IMAGE_REPOSITORY }}:${{ steps.generate_tag.outputs.GIT_TAG }}
labels: |
org.opencontainers.image.source=${{ github.event.repository.clone_url }}
org.opencontainers.image.created=${{ steps.prep.outputs.created }}
org.opencontainers.image.revision=${{ github.sha }}
78 changes: 4 additions & 74 deletions .github/workflows/push.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,13 @@ on:
- closed
branches:
- master
- 'v**'

env:
DOCKER_FILE_PATH: Dockerfile
DOCKER_UBI_FILE_PATH: Dockerfile.ubi
KUBERNETES_VERSION: "1.19.0"
KIND_VERSION: "0.17.0"
KUBERNETES_VERSION: "1.30.0"
KIND_VERSION: "0.23.0"
HELM_REGISTRY_URL: "https://stakater.github.io/stakater-charts"
REGISTRY: ghcr.io

Expand Down Expand Up @@ -62,8 +63,7 @@ jobs:
run: |
curl -LO "https://storage.googleapis.com/kubernetes-release/release/v${KUBERNETES_VERSION}/bin/linux/amd64/kubectl"
sudo install ./kubectl /usr/local/bin/ && rm kubectl
kubectl version --short --client
kubectl version --short --client | grep -q ${KUBERNETES_VERSION}
kubectl version --client=true
- name: Install Kind
run: |
Expand Down Expand Up @@ -207,76 +207,6 @@ jobs:
org.opencontainers.image.source=${{ github.event.repository.clone_url }}
org.opencontainers.image.revision=${{ github.sha }}
##############################
## Add steps to generate required artifacts for a release here(helm chart, operator manifest etc.)
##############################

# Skip pushing plain manifests till we decide what to do with them

# - name: Helm Template
# run: |
# helm template reloader deployments/kubernetes/chart/reloader/ \
# --set reloader.deployment.resources.limits.cpu=150m \
# --set reloader.deployment.resources.limits.memory=512Mi \
# --set reloader.deployment.resources.requests.cpu=10m \
# --set reloader.deployment.resources.requests.memory=128Mi > deployments/kubernetes/reloader.yaml

# helm template reloader deployments/kubernetes/chart/reloader/ --output-dir deployments/kubernetes/manifests && mv deployments/kubernetes/manifests/reloader/templates/* deployments/kubernetes/manifests/ && rm -r deployments/kubernetes/manifests/reloader

# - name: Remove labels and annotations from manifests
# run: make remove-labels-annotations

# Charts are to be pushed to a separate repo with a separate release cycle

# # Publish helm chart
# - name: Login to ghcr via helm
# run: |
# echo ${{secrets.GITHUB_TOKEN}} | helm registry login ghcr.io/stakater --username stakater-user --password-stdin

# - name: Publish Helm chart to ghcr.io
# run: |
# helm package ./deployments/kubernetes/chart/reloader --destination ./packaged-chart
# helm push ./packaged-chart/*.tgz oci://ghcr.io/stakater/charts
# rm -rf ./packaged-chart

# - name: Publish Helm chart to gh-pages
# uses: stefanprodan/helm-gh-pages@master
# with:
# branch: master
# repository: stakater-charts
# target_dir: docs
# token: ${{ secrets.STAKATER_GITHUB_TOKEN }}
# charts_dir: deployments/kubernetes/chart/
# charts_url: ${{ env.HELM_REGISTRY_URL }}
# owner: stakater
# linting: on
# commit_username: stakater-user
# commit_email: stakater@gmail.com

# # Commit back changes
# - name: Log info about `.git` directory permissions
# run: |
# # Debug logging
# echo "Disk usage: "
# df -H

# echo ".git files not owned by current user or current group:"
# find .git ! -user $(id -u) -o ! -group $(id -g) | xargs ls -lah

# - name: Commit files
# run: |
# git config --local user.email "stakater@gmail.com"
# git config --local user.name "stakater-user"
# git status
# git add .
# git commit -m "[skip-ci] Update artifacts" -a

# - name: Push changes
# uses: ad-m/github-push-action@master
# with:
# github_token: ${{ secrets.STAKATER_GITHUB_TOKEN }}
# branch: ${{ github.ref }}

- name: Push Latest Tag
uses: anothrNick/github-tag-action@1.71.0
env:
Expand Down
7 changes: 3 additions & 4 deletions .github/workflows/release.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ on:
env:
DOCKER_FILE_PATH: Dockerfile
DOCKER_UBI_FILE_PATH: Dockerfile.ubi
KUBERNETES_VERSION: "1.19.0"
KIND_VERSION: "0.17.0"
KUBERNETES_VERSION: "1.30.0"
KIND_VERSION: "0.23.0"
REGISTRY: ghcr.io

jobs:
Expand Down Expand Up @@ -57,8 +57,7 @@ jobs:
run: |
curl -LO "https://storage.googleapis.com/kubernetes-release/release/v${KUBERNETES_VERSION}/bin/linux/amd64/kubectl"
sudo install ./kubectl /usr/local/bin/ && rm kubectl
kubectl version --short --client
kubectl version --short --client | grep -q ${KUBERNETES_VERSION}
kubectl version --client=true
- name: Install Kind
run: |
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -16,3 +16,4 @@ styles/
site/
/mkdocs.yml
yq
bin
Loading

0 comments on commit 32d5bb8

Please sign in to comment.