mirror of
https://github.com/johannesjo/super-productivity.git
synced 2026-07-18 08:56:41 +00:00
* chore(plugins): re-bundle document-mode and document Stage A path Reverts the unbundling fromb0cae69ffe. Stage 0 (gzip + throttle, shipped in84625be849) handles size; document-mode remains opt-in per context, so cross-context conflict risk is bounded. Stage A (keyed plugin-persistence API, issue #7749) is the documented future path for closing the LWW gap on different-context concurrent edits — picked up when conflicts are observed in practice. Design sketch with multi-reviewed phasing lives in docs/plans/2026-05-23-stage-a-keyed-plugin-persistence.md. Predecessor plan's "Future work" section now links to it. * test(plugins): cover document-mode bundled load and PLUGIN_USER_DATA LWW Follow-ups from the multi-review of 199e816479's re-bundling decision: - E2E smoke test asserts document-mode appears in plugin management so a typo in BUNDLED_PLUGIN_PATHS fails loudly. - Spec exercises PLUGIN_USER_DATA conflict resolution end-to-end, which previously relied on analogy to REMINDER (same array+null branch) but was never directly asserted after the migration off 'virtual'. - Stage A plan risks: stale-editor-view gap surfaced by the review; PluginHooks.PERSISTED_DATA_UPDATE already exists in the API but is never dispatched host-side — wiring it is the path to a fix. - background.ts: comment marks the known gap at the registerHook site. * docs(plugins): plan for wiring PERSISTED_DATA_CHANGED hook Designs the host-side wiring for the currently-dead PluginHooks.PERSISTED_DATA_CHANGED so plugins can react to remote-driven changes to their persisted data. Multi-reviewed twice; v4 trims scope to host-only (no plugin adoption in this design) and preserves the multi-review insights as seeds for the follow-up doc-mode adoption tracked at issue #7752. Implementation lands in a separate PR. * fix(ci): pin wiki-sync second checkout to actions/checkout@v5 v6 stores credentials in a $RUNNER_TEMP file referenced via includeIf.gitdir matchers; the wiki push intermittently runs without credentials on github-hosted runners (run 26335467138 failed with "could not read Username for 'https://github.com'"). v5 uses the path-independent extraheader, which is stable for this second checkout pattern. Leaves the primary Checkout Code on v6.0.2 so Dependabot keeps it current. Refs: actions/checkout#2321, #2359
163 lines
5.3 KiB
YAML
163 lines
5.3 KiB
YAML
---
|
|
name: Wiki Update
|
|
|
|
'on':
|
|
pull_request:
|
|
branches: [master, main]
|
|
paths:
|
|
- 'docs/wiki/**'
|
|
- .github/workflows/wiki-sync.yml
|
|
- .github/annotations/wiki-lint-problem-matcher.json
|
|
push:
|
|
branches: [master, main]
|
|
paths:
|
|
- 'docs/wiki/**'
|
|
- .github/workflows/wiki-sync.yml
|
|
- .github/annotations/wiki-lint-problem-matcher.json
|
|
|
|
concurrency:
|
|
group: wiki
|
|
cancel-in-progress: true
|
|
|
|
permissions:
|
|
contents: write
|
|
|
|
jobs:
|
|
lint:
|
|
name: Lint
|
|
runs-on: ubuntu-latest
|
|
env:
|
|
GH_A9S: .github/annotations
|
|
GH_W7S: .github/workflows
|
|
|
|
steps:
|
|
- name: Checkout Code
|
|
uses: actions/checkout@v6.0.2
|
|
|
|
- name: Set up Python
|
|
uses: actions/setup-python@v6
|
|
with:
|
|
python-version: '3.13'
|
|
|
|
- name: Install dependencies
|
|
run: |
|
|
python -m pip install --upgrade pip
|
|
python -m pip install yamllint pymarkdownlnt
|
|
|
|
- name: Add Problem Matcher (for Annotations)
|
|
id: problem_matcher
|
|
run: echo "::add-matcher::${GH_A9S}/wiki-lint-problem-matcher.json"
|
|
|
|
- name: Lint with yamllint
|
|
id: yamllint
|
|
run: |
|
|
yamllint \
|
|
--format github \
|
|
"${GH_W7S}/wiki-sync.yml"
|
|
|
|
- name: Lint with pymarkdownlnt
|
|
if: >
|
|
steps.yamllint.outcome == 'success' &&
|
|
steps.problem_matcher.outcome == 'success'
|
|
run: |
|
|
pymarkdownlnt \
|
|
--disable-rules line-length,no-inline-html \
|
|
scan "docs/wiki"
|
|
|
|
sync:
|
|
name: (r)Sync
|
|
if: github.event_name == 'push'
|
|
needs: lint
|
|
runs-on: ubuntu-latest
|
|
env:
|
|
# Using [standard bot credentials](https://github.com/actions/checkout)
|
|
GIT_AUTHOR_NAME: github-actions[bot]
|
|
GIT_AUTHOR_EMAIL: 41898282+github-actions[bot]@users.noreply.github.com
|
|
GIT_COMMITTER_NAME: github-actions[bot]
|
|
GIT_COMMITTER_EMAIL: 41898282+github-actions[bot]@users.noreply.github.com
|
|
|
|
CODE_ROOT: code-root
|
|
WIKI_SRC: code-root/docs/wiki
|
|
WIKI_ROOT: wiki-root
|
|
|
|
steps:
|
|
- name: Checkout Code
|
|
uses: actions/checkout@v6.0.2
|
|
with:
|
|
repository: ${{ github.repository }}
|
|
path: ${{ env.CODE_ROOT }}
|
|
|
|
- name: Checkout Wiki
|
|
# Pinned to v5: v6 changed credential persistence to a path-scoped
|
|
# includeIf matcher, which intermittently leaves the wiki push without
|
|
# credentials on github-hosted runners (run 26335467138). v5 uses the
|
|
# path-independent extraheader and is stable for this second checkout.
|
|
uses: actions/checkout@v5
|
|
with:
|
|
repository: ${{ github.repository }}.wiki
|
|
path: ${{ env.WIKI_ROOT }}
|
|
|
|
- name: Verify Source and Target Git Checkouts
|
|
run: |
|
|
# --------------------------------------------------------------------
|
|
echo "::group::File and Directory Checks for ${WIKI_SRC}"
|
|
if [ ! -d "${CODE_ROOT}/.git" ]; then
|
|
echo "::error::Git directory for ${CODE_ROOT} is absent."
|
|
else
|
|
echo "Git directory for ${CODE_ROOT} is present."
|
|
fi
|
|
ls -lAh "${WIKI_SRC}"
|
|
echo "::endgroup::"
|
|
# --------------------------------------------------------------------
|
|
echo "::group::File and Directory Checks for ${WIKI_ROOT}"
|
|
if [ ! -d "${WIKI_ROOT}/.git" ]; then
|
|
echo "::error::Git directory for ${WIKI_ROOT} is absent."
|
|
else
|
|
echo "Git directory for ${WIKI_ROOT} is present."
|
|
fi
|
|
ls -lAh "${WIKI_ROOT}"
|
|
echo "::endgroup::"
|
|
# --------------------------------------------------------------------
|
|
|
|
- name: Mirror docs/wiki to GitHub Wiki
|
|
run: |
|
|
# RSYNC Options: assume that the code is always the source of truth
|
|
# RSYNC_DRY_RUN: "0"
|
|
# Hard mirror: overwrite + delete removed files and delete empty dirs
|
|
# Preserve existing '.git' in GH Wiki
|
|
# Report on changes in case dry-run debugging is needed
|
|
RSYNC_OPTIONS=(
|
|
--archive
|
|
--delete
|
|
--prune-empty-dirs
|
|
--exclude='.git'
|
|
--itemize-changes
|
|
--stats
|
|
)
|
|
|
|
# Optional dry-run for testing.
|
|
if [[ "${RSYNC_DRY_RUN:-0}" == "1" ]]; then
|
|
echo "::warning::DRY RUN --- no changes will be written"
|
|
RSYNC_OPTIONS+=(--dry-run)
|
|
fi
|
|
|
|
# Debug mode (warning: does not do a dry-run on its own!)
|
|
if [[ "${ACTIONS_STEP_DEBUG:-}" == "true" ]]; then
|
|
RSYNC_OPTIONS+=(-vv)
|
|
fi
|
|
|
|
# Mirror the code to the wiki.
|
|
rsync "${RSYNC_OPTIONS[@]}" "${WIKI_SRC}"/ "${WIKI_ROOT}"
|
|
|
|
- name: Switch, Commit, and Push
|
|
working-directory: ${{ env.WIKI_ROOT }}
|
|
run: |
|
|
git add -A # preferred over `git add .` in order to include deletions
|
|
if ! git diff-index --quiet HEAD; then
|
|
git commit -m "docs(wiki): auto-publish via wiki-sync.yml"
|
|
git push --force-with-lease # ensures edits in wiki don't block
|
|
else
|
|
# Expected if modifying only the YML and not the wiki content.
|
|
echo "::warning::No changes found to be committed."
|
|
echo "*No changes found to be committed.*" >> "$GITHUB_STEP_SUMMARY"
|
|
fi
|