Auto-sync test D ↞ [auto-sync from https://github.com/adamlui/js-util… #496
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Sync README.md between <pkg>/ and <pkg>/docs | |
on: | |
push: | |
branches: [main] | |
paths: ["**/README.md"] | |
permissions: | |
contents: read | |
jobs: | |
build: | |
if: (github.repository == 'adamlui/js-utils') && (github.event.commits[0].committer.username != 'kudo-sync-bot') | |
runs-on: ubuntu-latest | |
env: | |
TZ: PST8PDT | |
steps: | |
- name: Checkout adamlui/js-utils | |
uses: actions/checkout@v4 | |
with: | |
token: ${{ secrets.REPO_SYNC_PAT }} | |
repository: adamlui/js-utils | |
path: adamlui/js-utils | |
fetch-depth: 2 | |
- name: Sync README.md between <pkg>/ and <pkg>/docs | |
run: | | |
cd ${{ github.workspace }}/adamlui/js-utils | |
# Init pkg paths | |
PKG_ROOTS=($(find . -type d -name "docs" `# paths to docs/` \ | |
! -path "*/node_modules/*" `# exclude node_modules` \ | |
! -path "*/minify.js|scss-to-css/*" `# exclude multi-platform pkgs w/ own sync scripts` \ | |
-exec dirname {} \; | # get parent dir of found docs/ | |
grep -Ev "^\.$")) # exclude repo root | |
# Sync READMEs per pkg | |
for pkg_root in "${PKG_ROOTS[@]}" ; do | |
# Init paths/content/mod timestamps | |
root_readme=$pkg_root"/README.md" | |
root_readme_content=$(git show HEAD:"$root_readme") | |
root_readme_modified=$(git log -1 --format="%ct" -- "$root_readme") | |
docs_readme=$pkg_root"/docs/README.md" | |
docs_readme_content=$(git show HEAD:"$docs_readme") | |
docs_readme_modified=$(git log -1 --format="%ct" -- "$docs_readme") | |
# Perform syncs of diff READMEs | |
if [[ "$root_readme_content" != "$docs_readme_content" ]] ; then | |
if (( $root_readme_modified > $docs_readme_modified )) ; then | |
cp -f "$root_readme" "$docs_readme" | |
echo "Copied $root_readme to $docs_readme" | |
src_folder="/${pkg_root#./}" | |
elif (( $docs_readme_modified > $root_readme_modified )) ; then | |
cp -f "$docs_readme" "$root_readme" | |
echo "Copied $docs_readme to $root_readme" | |
src_folder="/${pkg_root#./}/docs" | |
fi | |
fi | |
done | |
# Expose sync src for commit msg in next step | |
echo "SYNC_SRC=$src_folder" >> $GITHUB_ENV | |
- name: Escape backticks in commit msg | |
env: | |
COMMIT_MSG: ${{ github.event.head_commit.message }} | |
run: | | |
echo "ESCAPED_MSG<<EOF" >> $GITHUB_ENV | |
echo "$COMMIT_MSG" | sed 's/`/\`/g' >> $GITHUB_ENV | |
echo "EOF" >> $GITHUB_ENV | |
- name: Config committer | |
run: | | |
gpg --batch --import <(echo "${{ secrets.GPG_PRIVATE_KEY }}") | |
git config --global commit.gpgsign true | |
git config --global user.name "kudo-sync-bot" | |
git config --global user.email "[email protected]" | |
git config --global user.signingkey "${{ secrets.GPG_PRIVATE_ID }}" | |
- name: Push changes to adamlui/js-utils | |
if: env.SYNC_SRC | |
run: | | |
cd ${{ github.workspace }}/adamlui/js-utils | |
git pull # again to sync w/ concurrent workflow updates | |
git add . | |
git commit -n -m "$ESCAPED_MSG ↞ [auto-sync from ${{ env.SYNC_SRC }}]" || true | |
git push |