Files
josh-sync/action.yml

65 lines
2.1 KiB
YAML
Raw Normal View History

2026-02-12 09:20:55 +03:00
name: josh-sync
description: Bidirectional monorepo ↔ subrepo sync via josh-proxy
inputs:
config:
description: "Path to .josh-sync.yml"
default: ".josh-sync.yml"
direction:
description: "forward, reverse, or both"
default: "both"
target:
description: "Sync only this target (default: all)"
required: false
branch:
description: "Sync only this branch (default: all)"
required: false
debug:
description: "Enable debug output"
default: "false"
runs:
using: composite
steps:
- name: Setup josh-sync
shell: bash
run: |
JOSH_DIR="$(mktemp -d)"
cp -r "${{ github.action_path }}/bin" "${{ github.action_path }}/lib" "${JOSH_DIR}/"
chmod +x "${JOSH_DIR}/bin/josh-sync"
echo "${JOSH_DIR}/bin" >> "$GITHUB_PATH"
echo "JOSH_SYNC_ROOT=${JOSH_DIR}" >> "$GITHUB_ENV"
- name: Check dependencies
shell: bash
run: |
for cmd in git curl jq yq; do
command -v "$cmd" &>/dev/null || { echo "::error::Missing required tool: $cmd"; exit 1; }
done
- name: Loop guard (forward)
id: guard
if: inputs.direction == 'forward' || inputs.direction == 'both'
shell: bash
run: |
TRAILER=$(yq '.bot.trailer' "${{ inputs.config }}" 2>/dev/null || echo "Josh-Sync-Origin")
if git log -1 --format=%B | grep -q "^${TRAILER}:"; then
echo "skip=true" >> "$GITHUB_OUTPUT"
echo "::notice::Skipping sync — HEAD commit has sync trailer (loop prevention)"
else
echo "skip=false" >> "$GITHUB_OUTPUT"
fi
- name: Sync
if: steps.guard.outputs.skip != 'true'
shell: bash
env:
JOSH_SYNC_DEBUG: ${{ inputs.debug == 'true' && '1' || '0' }}
run: |
2026-02-12 11:22:51 +03:00
ARGS=(--config "${{ inputs.config }}")
[[ "${{ inputs.direction }}" == "forward" ]] && ARGS+=(--forward)
[[ "${{ inputs.direction }}" == "reverse" ]] && ARGS+=(--reverse)
[[ -n "${{ inputs.target }}" ]] && ARGS+=(--target "${{ inputs.target }}")
[[ -n "${{ inputs.branch }}" ]] && ARGS+=(--branch "${{ inputs.branch }}")
josh-sync sync "${ARGS[@]}"