[IMP] add action to deploy config on all Elabore's Odoo addons repos
Some checks failed
Sync Config to All Odoo Repositories / sync (push) Has been cancelled

This commit is contained in:
Stéphan Sainléger
2025-09-15 18:46:41 +02:00
parent 20f28b9fd5
commit 954e119083
9 changed files with 126 additions and 0 deletions

View File

@@ -0,0 +1,126 @@
name: Sync Config to All Odoo Repositories
run-name: ${{ gitea.actor }} is deploying new pre-commit config 🚀
on:
push:
branches:
- 16.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.ELABORE_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
# 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 --quiet --single-branch --branch "$SOURCE_BRANCH" "https://elabore_bot:${GITEA_TOKEN}@${GITEA_SERVER}/${ORG_NAME}/${repo}.git" target-$repo || { echo "Failed to clone branch $SOURCE_BRANCH from $repo"; continue; }
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}"
echo "Attempts to push to $repo on branch $SOURCE_BRANCH"
git push --quiet origin "$SOURCE_BRANCH-config_deployment":refs/for/"$SOURCE_BRANCH" -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

View File

@@ -1,42 +0,0 @@
name: pre-commit
on:
pull_request:
branches:
- "16.0*"
jobs:
pre-commit:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.11"
- name: Get python version
run: echo "PY=$(python -VV | sha256sum | cut -d' ' -f1)" >> $GITHUB_ENV
- uses: actions/cache@v4
with:
path: ~/.cache/pre-commit
key: pre-commit|${{ env.PY }}|${{ hashFiles('.pre-commit-config.yaml') }}
- name: Install pre-commit
run: pip install pre-commit
- name: Run pre-commit
run: pre-commit run --all-files --show-diff-on-failure --color=always
env:
# Consider valid a PR that changes README fragments but doesn't
# change the README.rst file itself. It's not really a problem
# because the bot will update it anyway after merge. This way, we
# lower the barrier for functional contributors that want to fix the
# readme fragments, while still letting developers get README
# auto-generated (which also helps functionals when using runboat).
# DOCS https://pre-commit.com/#temporarily-disabling-hooks
SKIP: oca-gen-addon-readme
- name: Check that all files generated by pre-commit are in git
run: |
newfiles="$(git ls-files --others --exclude-from=.gitignore)"
if [ "$newfiles" != "" ] ; then
echo "Please check-in the following files:"
echo "$newfiles"
exit 1
fi