Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Branch based release strategy #778

Merged
merged 20 commits into from
Nov 15, 2024
Merged
Show file tree
Hide file tree
Changes from 17 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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.0.0
karl-johan-grahn marked this conversation as resolved.
Show resolved Hide resolved
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 }}"
karl-johan-grahn marked this conversation as resolved.
Show resolved Hide resolved
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
Loading