TrueChartsClone/.github/workflows/renovate-bump.yaml

150 lines
6.3 KiB
YAML

name: "Renovate: Bump on Push"
on:
push:
branches:
- "renovate/**"
tags-ignore:
- "**"
jobs:
renovate-bump:
name: Get changed Apps
runs-on: ubuntu-22.04
container:
image: ghcr.io/truecharts/devcontainer:3.1.10@sha256:c239addf725eb5cedf79517f8089fdafdc32b5270d1893ee87ae6e511b9bcae3
steps:
- uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4
name: Checkout
with:
fetch-depth: 0
token: ${{ secrets.BOT_TOKEN }}
- uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4
name: Checkout
with:
fetch-depth: 0
ref: master
path: master
- name: Setting repo parent dir as safe safe.directory
run: git config --global --add safe.directory "$GITHUB_WORKSPACE"
- uses: dorny/paths-filter@v2
id: filter
with:
list-files: json
filters: |
changed:
- 'charts/stable/**'
- 'charts/incubator/**'
- 'charts/SCALE/**'
- 'charts/library/**'
- 'charts/dependency/**'
- 'charts/core/**'
- 'charts/enterprise/**'
- 'charts/games/**'
- name: Filter filter-output
run: echo '${{ toJson(steps.filter.outputs) }}' > changes.json
- name: Bump and Sync
shell: bash
run: |
# Designed to ensure the appversion in Chart.yaml is in sync with the primary Chart tag if found
# Also makes sure that home link is pointing to the correct url
sync_tag() {
local chart="$1"
local chartname="$2"
local train="$3"
echo "Attempting to sync primary tag with appversion for: ${chartname}"
local tag="$(cat ${chart}/values.yaml | grep '^ tag: ' | awk -F" " '{ print $2 }' | head -1)"
tag="${tag%%@*}"
tag="${tag:-auto}"
tag=$(echo $tag | sed "s/release-//g")
tag=$(echo $tag | sed "s/release_//g")
tag=$(echo $tag | sed "s/version-//g")
tag=$(echo $tag | sed "s/version_//g")
tag="${tag#*V.}"
tag="${tag#*v-}"
tag="${tag#*v}"
tag="${tag%-*}"
tag="${tag:0:10}"
tag="${tag%-}"
tag="${tag%_}"
tag="${tag%.}"
echo "Updating tag of ${chartname} to ${tag}..."
sed -i -e "s|appVersion: .*|appVersion: \"${tag}\"|" "${chart}/Chart.yaml"
echo "Updating icon of ${chartname}..."
sed -i -e "s|icon: .*|icon: https:\/\/truecharts.org\/img\/hotlink-ok\/chart-icons\/${chartname}.png|" "${chart}/Chart.yaml"
echo "Updating home of ${chartname}..."
sed -i -e "s|home: .*|home: https:\/\/truecharts.org\/charts\/${train}\/${chartname}|" "${chart}/Chart.yaml"
echo "Attempting to update sources of ${chartname}..."
echo "Using go-yq verion: <$(go-yq -V)>"
# Get all sources (except truecharts)
curr_sources=$(go-yq '.sources[] | select(. != "https://github.com/truecharts*")' "${chart}/Chart.yaml")
# Empty sources list in-place
go-yq -i 'del(.sources.[])' "${chart}/Chart.yaml"
# Add truechart source
tcsource="https://github.com/truecharts/charts/tree/master/charts/$train/$chartname" go-yq -i '.sources += env(tcsource)' "${chart}/Chart.yaml"
# Add the rest of the sources
while IFS= read -r line; do
src="$line" go-yq -i '.sources += env(src)' "${chart}/Chart.yaml" || echo "src set error"
done <<< "$curr_sources"
echo "Sources of ${chartname} updated!"
}
export -f sync_tag
# The actual script
APPS=$(jq --raw-output '.changed_files | fromjson | .[] |= sub("(?<filepath>(?<first_directory>(?<root1>[\/]?)[^\/]+\/)(?<second_directory>(?<root2>[\/]?)[^\/]+\/)(?<third_directory>(?<root3>[\/]?)[^\/]+)(?<extra_paths>.+))"; "\(.third_directory)") | unique' changes.json | jq -r '.[]')
echo "changed apps: ${APPS[*]}"
for chart in ${APPS[*]}
do
if [[ "${chart}" == '.gitkeep' ]]; then
echo "Skipping..."
return
elif test -f "./charts/stable/${chart}/Chart.yaml"; then
train="stable"
elif test -f "./charts/incubator/${chart}/Chart.yaml"; then
train="incubator"
elif test -f "./charts/SCALE/${chart}/Chart.yaml"; then
train="SCALE"
elif test -f "./charts/library/${chart}/Chart.yaml"; then
train="library"
elif test -f "./charts/dependency/${chart}/Chart.yaml"; then
train="dependency"
elif test -f "./charts/core/${chart}/Chart.yaml"; then
train="core"
elif test -f "./charts/games/${chart}/Chart.yaml"; then
train="games"
elif test -f "./charts/enterprise/${chart}/Chart.yaml"; then
train="enterprise"
elif test -f "./charts/operators/${chart}/Chart.yaml"; then
train="operators"
else
train="incubator"
fi
echo "Comparing versions for ${train}/${chart}"
master=$(cat ./master/charts/${train}/${chart}/Chart.yaml | grep "^version")
current=$(cat ./charts/${train}/${chart}/Chart.yaml | grep "^version")
echo "master version: ${master}"
echo "current version: ${current}"
if [[ "${master}" != "${current}" ]]; then
echo "Version does not have to be bumped"
else
echo "Bumping patch version for ${train}/${chart}"
./tools/bump.sh patch ./charts/${train}/${chart}
fi
sync_tag "charts/${train}/${chart}" "${chart}" "${train}"
done
- name: Cleanup
run: |
rm -rf changes.json
rm -rf master
- name: Commit and Push new version
run: |
git config user.name "TrueCharts-Bot"
git config user.email "bot@truecharts.org"
git add --all
git commit -sm "Commit bumped Chart Version" || exit 0
git push