From 1acd289c87d6150ab3418a893a1b13663ee372de Mon Sep 17 00:00:00 2001 From: Salvydas Lukosius Date: Sun, 31 May 2026 19:05:41 +0100 Subject: [PATCH 1/2] ci(manifest): add manifest lint workflow Validate package.json parses, has the expected zsh-data structure, and is up-to-date with scripts/build-manifest.py on pushes/PRs touching the manifest or its generator. Declares least-privilege read-only permissions and pins the checkout action to a full commit SHA per workspace policy. --- .github/workflows/manifest-lint.yml | 35 +++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 .github/workflows/manifest-lint.yml diff --git a/.github/workflows/manifest-lint.yml b/.github/workflows/manifest-lint.yml new file mode 100644 index 0000000..36426ae --- /dev/null +++ b/.github/workflows/manifest-lint.yml @@ -0,0 +1,35 @@ +name: Manifest Lint + +on: + push: + branches: ["main", "next"] + paths: + - "package.json" + - "scripts/build-manifest.py" + pull_request: + paths: + - "package.json" + - "scripts/build-manifest.py" + +permissions: + contents: read + +jobs: + lint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + + - name: Validate package.json parses + run: | + jq . package.json > /dev/null + + - name: Validate zsh-data structure and default profile + run: | + jq -e '.["zsh-data"]["plugin-info"]["plugin"] == "zsh"' package.json > /dev/null + jq -e '.["zsh-data"]["zi-ices"]["default"]["atclone"] | length > 0' package.json > /dev/null + + - name: Ensure manifest is up-to-date with generator script + run: | + python3 scripts/build-manifest.py + git diff --exit-code package.json || (echo "package.json is out of date. Please run scripts/build-manifest.py and commit the result." && exit 1) From 2f04dda9ac6f0a2867c4d04f1bf1e24ae159cc70 Mon Sep 17 00:00:00 2001 From: Salvydas Lukosius Date: Sun, 31 May 2026 19:05:41 +0100 Subject: [PATCH 2/2] build(package): drop ancient Zsh 5.1.1/5.2.4 from version matrix Remove the two oldest selectable profiles from the generator's VERSIONS list, regenerate package.json (default + 8 versions), and trim the matching README install examples. The unpinned default and 5.3.1+ profiles are unaffected. --- docs/README.md | 2 -- package.json | 22 ---------------------- scripts/build-manifest.py | 2 +- 3 files changed, 1 insertion(+), 25 deletions(-) diff --git a/docs/README.md b/docs/README.md index 16fec5e..714d4a8 100755 --- a/docs/README.md +++ b/docs/README.md @@ -42,8 +42,6 @@ zi pack"5.6.2" for zsh zi pack"5.5.1" for zsh zi pack"5.4.2" for zsh zi pack"5.3.1" for zsh -zi pack"5.2.4" for zsh -zi pack"5.1.1" for zsh ``` ### System installation (opt-in) diff --git a/package.json b/package.json index e768ebf..d8e91bd 100755 --- a/package.json +++ b/package.json @@ -27,28 +27,6 @@ "nocompletions": "", "countdown": "" }, - "5.1.1": { - "requires": "cc;make;cp;rm", - "git": "", - "lucid": "", - "as": "null", - "atclone": "git checkout --quiet zsh-5.1.1; ./.preconfig; m {nl}{hi}Building Zsh{…}; CPPFLAGS='-I/usr/include -I/usr/local/include' CFLAGS='-g -O2 -Wall' LDFLAGS='-L/usr/lib -L/usr/local/lib' ./configure --prefix=\"$ZPFX\" >> /dev/null 2>&1 && { type yodl >> /dev/null 2>&1 || { m -u2 {warn}WARNING{ehi}:{rst}{warn} No {cmd}yodl{warn}, manual pages will not be built.; ((0)); } && { make install; ((1)); } || make install.bin install.fns install.modules } >> /dev/null 2>&1 && { [[ ${ZSH_INSTALL_SYSTEM:-} != 1 ]] || { type sudo >> /dev/null 2>&1 && [[ -e /bin/zsh ]] && [[ ! -e /bin/zsh.bkp ]] && sudo mv /bin/zsh /bin/zsh.bkp && sudo cp -vf Src/zsh /bin/zsh; }; } && m {ok}The build succeeded. || m {failure}The build failed.", - "atpull": "%atclone", - "nocompile": "", - "nocompletions": "", - "countdown": "" - }, - "5.2.4": { - "requires": "cc;make;cp;rm", - "git": "", - "lucid": "", - "as": "null", - "atclone": "git checkout --quiet zsh-5.2.4; ./.preconfig; m {nl}{hi}Building Zsh{…}; CPPFLAGS='-I/usr/include -I/usr/local/include' CFLAGS='-g -O2 -Wall' LDFLAGS='-L/usr/lib -L/usr/local/lib' ./configure --prefix=\"$ZPFX\" >> /dev/null 2>&1 && { type yodl >> /dev/null 2>&1 || { m -u2 {warn}WARNING{ehi}:{rst}{warn} No {cmd}yodl{warn}, manual pages will not be built.; ((0)); } && { make install; ((1)); } || make install.bin install.fns install.modules } >> /dev/null 2>&1 && { [[ ${ZSH_INSTALL_SYSTEM:-} != 1 ]] || { type sudo >> /dev/null 2>&1 && [[ -e /bin/zsh ]] && [[ ! -e /bin/zsh.bkp ]] && sudo mv /bin/zsh /bin/zsh.bkp && sudo cp -vf Src/zsh /bin/zsh; }; } && m {ok}The build succeeded. || m {failure}The build failed.", - "atpull": "%atclone", - "nocompile": "", - "nocompletions": "", - "countdown": "" - }, "5.3.1": { "requires": "cc;make;cp;rm", "git": "", diff --git a/scripts/build-manifest.py b/scripts/build-manifest.py index 926b05c..d70537e 100644 --- a/scripts/build-manifest.py +++ b/scripts/build-manifest.py @@ -28,7 +28,7 @@ PLUGIN_INFO = {"user": "zsh-users", "plugin": "zsh"} # Selectable version profiles, in addition to the unpinned "default". -VERSIONS = ["5.1.1", "5.2.4", "5.3.1", "5.4.2", "5.5.1", "5.6.2", +VERSIONS = ["5.3.1", "5.4.2", "5.5.1", "5.6.2", "5.7.1", "5.8", "5.8.1", "5.9"] # Single source of truth for the build recipe. `{checkout}` is replaced per