@@ -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."
|
||||||
@@ -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
|
||||||
Reference in New Issue
Block a user