104 lines
2.5 KiB
Python
Executable File
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())
|