Renovate workflows.
Renovate / renovate (push) Successful in 37s

This commit is contained in:
2025-09-22 15:34:30 -04:00
parent e8b04c63d3
commit 945b58fc63
2 changed files with 202 additions and 0 deletions
+173
View File
@@ -0,0 +1,173 @@
name: Renovate PR Deployment
on:
workflow_dispatch:
pull_request:
types: [closed]
branches:
- main
env:
HC_VAULT_VERSION: "1.18.0"
jobs:
deploy:
if: |
github.event.pull_request.merged == true &&
github.event.pull_request.user.login == 'renovate-bot' &&
startsWith(github.event.pull_request.head.ref, 'renovate/docker-compose')
runs-on: ubuntu-latest
steps:
- name: Check out code
uses: actions/checkout@v4
- name: Install Vault
uses: cpanato/vault-installer@main
with:
version: ${{ env.HC_VAULT_VERSION }}
- name: Detect Renovate update type
id: detect-update
env:
PR_BODY: ${{ github.event.pull_request.body }}
run: |
echo "PR body: $PR_BODY"
if echo "$PR_BODY" | grep -qE 'Update Type: (patch|minor|major|digest)'; then
echo "update=true" >> $GITHUB_OUTPUT
else
echo "update=false" >> $GITHUB_OUTPUT
fi
- name: Stop if update not patch/minor/major/digest
if: steps.detect-update.outputs.update != 'true'
run: |
echo "::warning::This PR does not involve patch/minor/major/digest update. Skipping deployment."
exit 0
- name: Get changed services from docker-compose.yml
id: services
run: |
echo "Getting services from main and ${{ github.ref_name }}"
# Dynamically find all docker-compose YAML files (root + compose folder)
COMPOSE_FILES=($(find . -maxdepth 2 -type f -name 'docker-compose*.yml' | sort))
echo "Found Compose files:"
printf '%s\n' "${COMPOSE_FILES[@]}"
# Temp files to store all services
touch services_main_all.txt services_head_all.txt
for f in "${COMPOSE_FILES[@]}"; do
echo "Processing $f"
# Create a safe filename by replacing slashes with underscores
safe_f=$(echo "$f" | sed 's|[./]|_|g')
# Fetch main version
git show origin/main:"$f" > "main_${safe_f}" 2>/dev/null || touch "main_${safe_f}"
cp "$f" "head_${safe_f}"
# Extract services and append to global list
yq '.services | keys | .[]' "main_${safe_f}" >> services_main_all.txt 2>/dev/null || true
yq '.services | keys | .[]' "head_${safe_f}" >> services_head_all.txt 2>/dev/null || true
done
# Sort and deduplicate
sort -u services_main_all.txt -o services_main_all.txt
sort -u services_head_all.txt -o services_head_all.txt
echo "Creating list of modified services..."
touch service_changes.txt
# Added services
comm -13 services_main_all.txt services_head_all.txt | while read service; do
echo "$service: added" >> service_changes.txt
done
# Modified services (parallelized)
comm -12 services_main_all.txt services_head_all.txt | xargs -n1 -P4 -I{} bash -c '
service="{}"
modified=0
for f in "${COMPOSE_FILES[@]}"; do
safe_f=$(echo "$f" | sed "s|[./]|_|g")
yq ".services[\"$service\"]" "main_${safe_f}" > tmp_main.yml 2>/dev/null || continue
yq ".services[\"$service\"]" "head_${safe_f}" > tmp_head.yml 2>/dev/null || continue
if ! diff -q tmp_main.yml tmp_head.yml > /dev/null; then
modified=1
break
fi
done
if [[ $modified -eq 1 ]]; then
echo "$service: modified" >> service_changes.txt
fi
'
echo "Detected service changes:"
cat service_changes.txt
if [[ -z $(cat service_changes.txt) ]]; then
echo "watchtower" > service_changes.txt
echo "Placeholder:"
cat service_changes.txt
fi
mod_svcs=$(cut -d':' -f1 service_changes.txt | sort | uniq | tr '\n' ' ' | sed 's/ *$//')
echo "docker_svc_list<<EOF" >> "$GITHUB_OUTPUT"
echo "$mod_svcs" >> "$GITHUB_OUTPUT"
echo "EOF" >> "$GITHUB_OUTPUT"
- name: List of Services for (Re)Deployment
run: |
echo -e "${{ steps.services.outputs.docker_svc_list }}"
- name: Get list of Compose files
id: compose_file_list
run: |
compose_list=$(find . -type f -name "docker-compose*.yml" \
-a ! -name "*windows*" \
-a ! -name "*gui*" \
-a ! -name "*macos*" \
-a ! -name "*hivemind*" \
-a ! -name "*server*" \
| sed -e ':a;N;$!ba;s/[\r\n]/ /g')
echo "compose_list=$compose_list" >> "$GITHUB_OUTPUT"
echo "Compose files: $compose_list"
- name: Generate .env file for Docker Compose
run: |
vault kv get -format=json benedikta-docker/env | jq -r '.data.data' | jq -r 'keys[] as $k | "\($k)='\''\(.[$k])'\''"' > .env
- name: Gotify Notification
uses: eikendev/gotify-action@master
with:
gotify_api_base: "${{ secrets.GOTIFY_URL }}"
gotify_app_token: "${{ secrets.RUNNER_GOTIFY_TOKEN }}"
notification_title: "GITEA: [RENOVATE] Docker Compose Deployment @ Rikku"
notification_message: "Starting Docker Compose run..."
- name: Docker Compose Deployment
uses: cssnr/stack-deploy-action@v1.4.0
with:
mode: compose
file: ${{ steps.compose_file_list.outputs.compose_list }}
name: "ovosmisc"
host: 192.168.1.250
user: ovos
ssh_key: ${{ secrets.BDIKTA_GITEA_PRIVATE_SSH_KEY }}
args: --remove-orphans ${{ steps.services.outputs.docker_svc_list }}
env_file: ".env"
# registry_host: 'ghcr.io'
# registry_user: TrezOne
# registry_pass: ${{ secrets.GHCR_LOGIN_TOKEN }}
summary: true
- name: Gotify Notification
uses: eikendev/gotify-action@master
with:
gotify_api_base: "${{ secrets.GOTIFY_URL }}"
gotify_app_token: "${{ secrets.RUNNER_GOTIFY_TOKEN }}"
notification_title: "GITEA: [RENOVATE] Docker Compose Deployment @ Rikku"
notification_message: "Deployment completed successfully."
+29
View File
@@ -0,0 +1,29 @@
name: Renovate
on:
schedule:
- cron: "0/30 * * * *"
workflow_dispatch:
jobs:
renovate:
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Renovate Run
env:
DOCKER_HOST: tcp://dockerproxy:2375
run: |
docker run --rm \
-e RENOVATE_PLATFORM=gitea \
-e RENOVATE_ENDPOINT=https://git.trez.wtf/api/v1 \
-e RENOVATE_TOKEN=${{ secrets.RENOVATE_BOT_TOKEN }} \
-e LOG_LEVEL=debug \
-e RENOVATE_GITHUB_COM_TOKEN=${{ secrets.RENOVATE_GITHUB_TOKEN }} \
-e RENOVATE_CONFIG_FILE=renovate.json \
--volumes-from ${{ env.JOB_CONTAINER_NAME }} \
-w ${GITHUB_WORKSPACE} \
renovate/renovate:41.97.7-full