Sync docs commits from `master` out to the live docs branches in the nx repo: cherry-picks `docs(` / `feat(nx-dev)` commits onto `website-<major>` AND the latest `<major>.<minor>.x` release branch. Use when "update the docs branch", "update nx.dev", "push the latest docs changes out", "cherry-pick docs commits", "sync website-23", "ship docs to the website branch", "update the docs website", "get docs onto the release branch", or any request to move already-merged docs commits from master onto the branches that deploy them.
Install
npx skillscat add nrwl/nx/docs-website-update Install via the SkillsCat registry.
Update Docs Website
This skill works in the nx repo only.
CRITICAL:
- If you are not in the
nxrepo, say so and stop working! - If there are uncommitted/untracked files, say so and stop working!
Why two branches
Docs commits must land on BOTH:
website-<major>(e.g.website-23) - deploys nx.dev for the current major- the latest release branch
<major>.<minor>.x(e.g.23.1.x) - used for patch releases, and the release pipeline overwrites thewebsite-<major>branch from it
If only website-23 gets the commit, the next patch release from 23.1.x wipes it.
How to Update
1. Determine the branches
git fetch origin master
git fetch origin 'refs/heads/website-*:refs/remotes/origin/website-*'
git fetch origin 'refs/heads/*.x:refs/remotes/origin/*.x'- Website branch: highest
origin/website-<N>where<N>is an integer.
Excludewebsite-masterand any branch with extra path segments (e.g.website-19-cherry-01/...).git for-each-ref --format='%(refname:short)' 'refs/remotes/origin/website-*' \ | grep -E '^origin/website-[0-9]+$' | sort -V | tail -1 - Release branch: highest
origin/<N>.<minor>.xwith the SAME major<N>as the website branch.
If no release branch exists for that major, say so and continue with the website branch only.git for-each-ref --format='%(refname:short)' 'refs/remotes/origin/*.x' \ | grep -E "^origin/${MAJOR}\.[0-9]+\.x$" | sort -V | tail -1
Report both branch names before doing any work.
2. Sync the branches
git checkout master && git reset --hard origin/master
git checkout <website-branch> && git reset --hard origin/<website-branch>
git checkout <release-branch> && git reset --hard origin/<release-branch>3. Build the cherry-pick list (from the website branch)
- On
<website-branch>, get the last commit subject ->/tmp/last-website-commit.txt - Back on
master, find the commit whose subject matches/tmp/last-website-commit.txt-> sha in/tmp/last-master-sha.txt - On
master, list commits between that sha andHEAD, filtered to subjects starting withdocs(orfeat(nx-dev)->/tmp/commits-to-cherry-pick.txt(oldest at bottom, asgit logprints it)
4. Cherry-pick onto the website branch
On <website-branch>, oldest to newest:
git cherry-pick <sha>- On failure: record in
/tmp/failed-website.txt,git cherry-pick --abort, move on. - If the pick is empty (already applied):
git cherry-pick --skip, record as skipped.
5. Cherry-pick the SAME list onto the release branch
The release branch was cut from master at a different point, so some commits may already be there.
- Skip any commit whose subject already appears in the release branch's log:
git log <release-branch> --format='%s' | grep -Fxq "<subject>" - Cherry-pick the rest oldest to newest, same rules as step 4.
- Failures ->
/tmp/failed-release.txt - Empty picks ->
git cherry-pick --skip
- Failures ->
Conflicts are more likely here than on the website branch - do NOT try to resolve them, just abort and report.
6. Report
Print a per-branch breakdown:
| Branch | Cherry-picked | Already present / skipped | Failed |
|---|
List failed shas with subjects so they can be handled manually.
Do NOT push. End by reminding which branches have unpushed commits, e.g.:
git push origin website-23
git push origin 23.1.x