name: "Markdown → HTML Publisher" description: > Converts all *.md files in the given path (recursively) to HTML via Pandoc and commits the result into the specified branch as an orphan branch, replacing the entire branch content and removing history. inputs: path: description: "Directory to scan for Markdown files (default: $GITHUB_WORKSPACE)" required: false branch: description: "Target branch that will receive the generated HTML" required: false default: pages runs: using: composite steps: # 0) Checkout repository with full history so we can delete/reset branches - name: Checkout repository uses: actions/checkout@v4 with: fetch-depth: 0 # 1) Configure git author (uses default values if none supplied) - name: Setup git author shell: bash run: | bash "${{ github.action_path }}/scripts/setup-git.sh" # 2) Install or ensure pandoc is present - name: Install pandoc shell: bash run: | bash "${{ github.action_path }}/scripts/install-pandoc.sh" # 3) Convert Markdown files to HTML into a temporary directory - name: Convert Markdown tree shell: bash run: | SRC_DIR="${{ inputs.path }}" [[ -z "$SRC_DIR" ]] && SRC_DIR="$GITHUB_WORKSPACE" TMP_DIR="$(mktemp -d)" bash "${{ github.action_path }}/scripts/convert-md-tree.sh" "$SRC_DIR" "$TMP_DIR" echo "TMP_DIR=$TMP_DIR" >> "$GITHUB_ENV" # 4) Delete target branch (if it exists) and create new orphan branch - name: Recreate orphan target branch shell: bash run: | TARGET_BRANCH="${{ inputs.branch }}" [[ -z "$TARGET_BRANCH" ]] && TARGET_BRANCH="pages" if git show-ref --quiet "refs/heads/$TARGET_BRANCH"; then git branch -D "$TARGET_BRANCH" fi git switch --orphan "$TARGET_BRANCH" git rm -rf . || true echo "TARGET_BRANCH=$TARGET_BRANCH" >> "$GITHUB_ENV" # 5) Replace contents of the branch with generated HTML - name: Replace branch contents shell: bash run: | rm -rf ./* || true cp -r "$TMP_DIR"/. . rm -rf "$TMP_DIR" # 6) Commit and push changes if there are any - name: Commit and push changes shell: bash run: | TARGET_BRANCH="${TARGET_BRANCH:-${{ inputs.branch }}}" [[ -z "$TARGET_BRANCH" ]] && TARGET_BRANCH="pages" if git status --porcelain | grep -q . then git add . git commit -m "Automatic HTML publish: $(date -u +'%Y-%m-%d %H:%M:%S UTC')" git push --force origin "$TARGET_BRANCH" else echo "ℹ️ No changes to commit." fi