fluxer/scripts/ci/workflows/sync_desktop.py
2026-02-17 12:22:36 +00:00

104 lines
2.5 KiB
Python
Executable File

#!/usr/bin/env python3
import pathlib
import sys
sys.path.append(str(pathlib.Path(__file__).resolve().parents[1]))
from ci_steps import bot_user_id_script
from ci_workflow import EnvArg, parse_step_env_args
from ci_utils import run_step
STEPS: dict[str, str] = {
"get_user_id": bot_user_id_script(),
"determine_branch": """
set -euo pipefail
if [[ -n "${INPUT_BRANCH}" ]]; then
echo "name=${INPUT_BRANCH}" >> "$GITHUB_OUTPUT"
else
echo "name=${REF_NAME}" >> "$GITHUB_OUTPUT"
fi
""",
"clone_target": """
set -euo pipefail
git clone --depth 1 "https://x-access-token:${TOKEN}@github.com/fluxerapp/fluxer_desktop.git" target || {
mkdir target
cd target
git init
git remote add origin "https://x-access-token:${TOKEN}@github.com/fluxerapp/fluxer_desktop.git"
}
""",
"configure_git": """
set -euo pipefail
cd target
git config user.name "${APP_SLUG}[bot]"
git config user.email "${USER_ID}+${APP_SLUG}[bot]@users.noreply.github.com"
""",
"checkout_or_create_branch": """
set -euo pipefail
cd target
BRANCH="${BRANCH_NAME}"
if git ls-remote --exit-code --heads origin "$BRANCH" >/dev/null 2>&1; then
git fetch origin "$BRANCH"
git checkout "$BRANCH"
else
git checkout --orphan "$BRANCH"
git rm -rf . 2>/dev/null || true
fi
""",
"sync_files": """
set -euo pipefail
find target -mindepth 1 -maxdepth 1 ! -name '.git' -exec rm -rf {} +
cp -a source/fluxer_desktop/. target/
""",
"commit_and_push": """
set -euo pipefail
cd target
BRANCH="${BRANCH_NAME}"
SOURCE_SHA="$(git -C ../source rev-parse --short HEAD)"
git add -A
if git diff --cached --quiet; then
echo "No changes to commit"
exit 0
fi
git commit -m "Sync from fluxerapp/fluxer @ ${SOURCE_SHA}"
git push origin "HEAD:refs/heads/${BRANCH}"
echo "Synced to fluxerapp/fluxer_desktop:${BRANCH}"
""",
"summary": """
set -euo pipefail
{
echo "## Desktop Sync Complete"
echo ""
echo "- **Source:** \`fluxerapp/fluxer:${BRANCH_NAME}\`"
echo "- **Destination:** \`fluxerapp/fluxer_desktop:${BRANCH_NAME}\`"
echo "- **Commit:** \`$(git -C source rev-parse --short HEAD)\`"
} >> "$GITHUB_STEP_SUMMARY"
""",
}
def main() -> int:
args = parse_step_env_args(
[
EnvArg("--app-slug", "APP_SLUG"),
EnvArg("--token", "TOKEN"),
EnvArg("--user-id", "USER_ID"),
EnvArg("--input-branch", "INPUT_BRANCH"),
EnvArg("--ref-name", "REF_NAME"),
EnvArg("--branch-name", "BRANCH_NAME"),
]
)
run_step(STEPS, args.step)
return 0
if __name__ == "__main__":
raise SystemExit(main())