[IMP] add action to deploy config on all Elabore's Odoo addons repos
All checks were successful
Sync Config to All Odoo Repositories / sync (push) Successful in 11s
All checks were successful
Sync Config to All Odoo Repositories / sync (push) Successful in 11s
This commit is contained in:
134
.gitea/workflows/deploy-config.yml
Normal file
134
.gitea/workflows/deploy-config.yml
Normal file
@@ -0,0 +1,134 @@
|
|||||||
|
name: Sync Config to All Odoo Repositories
|
||||||
|
run-name: ${{ gitea.actor }} is deploying new pre-commit config 🚀
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- 16.0
|
||||||
|
- 18.0
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
sync:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
run: |
|
||||||
|
sudo apt-get update
|
||||||
|
sudo apt-get install -y jq git rsync
|
||||||
|
|
||||||
|
- name: Determine source branch
|
||||||
|
id: branch_vars
|
||||||
|
run: |
|
||||||
|
# Set SOURCE_BRANCH to the branch/tag that triggered this workflow
|
||||||
|
echo "SOURCE_BRANCH=${GITEA_REF_NAME}" >> $GITEA_ENV
|
||||||
|
env:
|
||||||
|
GITEA_REF_NAME: ${{ gitea.ref_name }}
|
||||||
|
|
||||||
|
- name: Checkout config repository
|
||||||
|
env:
|
||||||
|
GITEA_SERVER: "https://git.elabore.coop" # Base URL of Gitea instance, e.g. https://gitea.example.com
|
||||||
|
ORG_NAME: "Elabore"
|
||||||
|
CONFIG_REPO: "odoo-elabore-ci"
|
||||||
|
SOURCE_BRANCH: ${{ env.SOURCE_BRANCH }}
|
||||||
|
run: |
|
||||||
|
# Clone the config repo to local directory
|
||||||
|
git clone --single-branch --branch "$SOURCE_BRANCH" "${GITEA_SERVER}/${ORG_NAME}/${CONFIG_REPO}.git" config-repo
|
||||||
|
# Path where configs are stored in config repo
|
||||||
|
CONFIG_PATH="config"
|
||||||
|
|
||||||
|
- name: Get list of all repos in organization
|
||||||
|
env:
|
||||||
|
GITEA_SERVER: "https://git.elabore.coop"
|
||||||
|
ORG_NAME: "Elabore"
|
||||||
|
GITEA_TOKEN: ${{ secrets.BOT_TOKEN }} # token must have read + write permissions on all repos
|
||||||
|
run: |
|
||||||
|
page=1
|
||||||
|
per_page=50
|
||||||
|
REPO_LIST="repos.txt"
|
||||||
|
> $REPO_LIST
|
||||||
|
while true; do
|
||||||
|
echo "Fetching page $page"
|
||||||
|
response=$(curl -s -H "Authorization: token $GITEA_TOKEN" \
|
||||||
|
"${GITEA_SERVER}/api/v1/orgs/${ORG_NAME}/repos?page=${page}&limit=${per_page}")
|
||||||
|
count=$(echo "$response" | jq 'length')
|
||||||
|
if [ "$count" -eq 0 ]; then
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
# Append each repo name to file
|
||||||
|
echo "response=$response"
|
||||||
|
echo "$response" | jq .
|
||||||
|
echo "$response" | jq -r '.[].name' >> $REPO_LIST
|
||||||
|
page=$((page + 1))
|
||||||
|
done
|
||||||
|
echo "Repositories found:"
|
||||||
|
cat $REPO_LIST
|
||||||
|
|
||||||
|
- name: Sync config to each repo
|
||||||
|
env:
|
||||||
|
GITEA_SERVER: "git.elabore.coop"
|
||||||
|
ORG_NAME: "Elabore"
|
||||||
|
SOURCE_BRANCH: ${{ env.SOURCE_BRANCH }}
|
||||||
|
CONFIG_REPO: "odoo-elabore-ci"
|
||||||
|
GITEA_TOKEN: ${{ secrets.ELABORE_BOT_TOKEN }}
|
||||||
|
CONFIG_PATH: "config"
|
||||||
|
run: |
|
||||||
|
REPO_LIST="repos.txt"
|
||||||
|
while read repo; do
|
||||||
|
# Skip the config repo itself
|
||||||
|
if [ "$repo" = "$CONFIG_REPO" ]; then
|
||||||
|
echo "Skipping config repo: $repo"
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
# XXXSte - work only on event-tools for test purposes - TO BE DELETER
|
||||||
|
if [ "$repo" != "event-tools" ]; then
|
||||||
|
echo "Skipping config repo: $repo"
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Skip repos not matching suffixes -addons and -tools
|
||||||
|
if ! [[ "$repo" == *-addons ]] && ! [[ "$repo" == *-tools ]]; then
|
||||||
|
echo "Skipping $repo (does not end with -addons or -tools)"
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Processing repo: $repo"
|
||||||
|
|
||||||
|
# Clone the target repo
|
||||||
|
echo "${GITEA_TOKEN}"
|
||||||
|
git clone --single-branch --branch "$SOURCE_BRANCH" "https://elabore_bot:${GITEA_TOKEN}@${GITEA_SERVER}/${ORG_NAME}/${repo}.git" target-$repo
|
||||||
|
cd target-$repo || { echo "Failed to enter target-$repo"; exit 1; }
|
||||||
|
|
||||||
|
# Copy files from config repo
|
||||||
|
echo "Copy config to target repo $repo"
|
||||||
|
rsync -av ../config-repo/$CONFIG_PATH/ .
|
||||||
|
git add -N .
|
||||||
|
|
||||||
|
# If there are no changes, skip
|
||||||
|
if git diff --quiet; then
|
||||||
|
echo "No changes for $repo"
|
||||||
|
else
|
||||||
|
echo "Changes detected for $repo – committing & pushing"
|
||||||
|
# Set user identity for commit
|
||||||
|
git config user.name "elabore_bot"
|
||||||
|
git config user.email "gitea.bot@elabore.coop"
|
||||||
|
git checkout -b "$SOURCE_BRANCH-config_deployment"
|
||||||
|
git add .
|
||||||
|
git commit -m "Sync config from ${CONFIG_REPO}:${SOURCE_BRANCH}"
|
||||||
|
git -v
|
||||||
|
|
||||||
|
echo "Attempts to push to $repo on branch $SOURCE_BRANCH"
|
||||||
|
git push origin "$SOURCE_BRANCH-config_deployment":"$SOURCE_BRANCH-config_deployment" -o topic="$SOURCE_BRANCH-config_deployment" -o title="Sync config from ${CONFIG_REPO}:${SOURCE_BRANCH}" -o force-push || { echo "Push failed for $repo"; exit 1; }
|
||||||
|
echo "Push done for $repo"
|
||||||
|
fi
|
||||||
|
|
||||||
|
cd .. # go back to workflow root
|
||||||
|
# Clean up clone
|
||||||
|
echo "Cleaning up $repo"
|
||||||
|
rm -rf target-$repo
|
||||||
|
echo "Cleanup done for $repo"
|
||||||
|
|
||||||
|
echo "Moving to next repo"
|
||||||
|
|
||||||
|
done < $REPO_LIST
|
Reference in New Issue
Block a user