From e36882b30a911f4fa60e821e485d483f02ed3b46 Mon Sep 17 00:00:00 2001 From: JGZYES Date: Sun, 6 Sep 2026 14:29:53 +0800 Subject: [PATCH] feat: ppdm one-line installer + fix ppdm release asset naming - web/install-ppdm.sh (+ web/download/install-ppdm.sh, and copied into the release as out/install-ppdm.sh): downloads the latest ppdm binary and installs to ~/.ppdm/bin/ppdm (same path as ppdm update), prepends ~/.ppdm/bin to PATH in ~/.bashrc, prints version (amd64; aarch64 uses ppdm-aarch64). - release.yml: per-arch ppdm asset names (ppdm / ppdm-aarch64 / ppdm.exe) so the amd64 and aarch64 builds no longer both write out/ppdm (collision). --- .github/workflows/release.yml | 6 +++- web/download/install-ppdm.sh | 63 +++++++++++++++++++++++++++++++++++ web/install-ppdm.sh | 63 +++++++++++++++++++++++++++++++++++ 3 files changed, 131 insertions(+), 1 deletion(-) create mode 100644 web/download/install-ppdm.sh create mode 100644 web/install-ppdm.sh diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 499b408..baf9c67 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -25,18 +25,21 @@ jobs: ext: .exe pkg: mingw-w64 bin: pmm.exe + ppdm: ppdm.exe arch: windows-amd64 - target: linux-amd64 cc: gcc ext: '' pkg: '' bin: pmm + ppdm: ppdm arch: amd64 - target: linux-aarch64 cc: aarch64-linux-gnu-gcc ext: '' pkg: gcc-aarch64-linux-gnu bin: pmm-aarch64 + ppdm: ppdm-aarch64 arch: aarch64 runs-on: ubuntu-latest steps: @@ -57,7 +60,7 @@ jobs: src/main.c src/json.c src/ini.c src/pmm.c src/http.c src/repo.c src/install.c \ src/sha256.c src/sha1.c src/mirrors.c src/pdm.c src/out.c src/i18n.c # -- ppdm package dev tool (register/login/update/pack/publish) — own version 0.0.1 - ${{ matrix.cc }} -O2 -Wall -static -std=c11 -D_GNU_SOURCE -D_FORTIFY_SOURCE=0 -U_FORTIFY_SOURCE -DPPDM_VERSION=\"0.0.1\" -o out/ppdm${{ matrix.ext }} \ + ${{ matrix.cc }} -O2 -Wall -static -std=c11 -D_GNU_SOURCE -D_FORTIFY_SOURCE=0 -U_FORTIFY_SOURCE -DPPDM_VERSION=\"0.0.1\" -o out/${{ matrix.ppdm }} \ src/ppdm.c src/pmm.c src/json.c src/ini.c src/http.c src/repo.c src/install.c \ src/sha256.c src/sha1.c src/mirrors.c src/pdm.c src/out.c src/i18n.c @@ -70,6 +73,7 @@ jobs: # -- install.sh helper (uploaded to the release, also served at /install.sh) cp web/install.sh out/install.sh + cp web/install-ppdm.sh out/install-ppdm.sh # -- aarch64: a .pdm (pure tar, no pmm needed) for Linux ARM64 if [ -f out/pmm-aarch64 ]; then diff --git a/web/download/install-ppdm.sh b/web/download/install-ppdm.sh new file mode 100644 index 0000000..411acb0 --- /dev/null +++ b/web/download/install-ppdm.sh @@ -0,0 +1,63 @@ +#!/bin/sh +# ppdm (ParlzPackageDevManager) — Linux/macOS one-line installer. +# +# 用法: +# curl -sSL https://pmm.parlz.com/download/install-ppdm.sh | bash +# 或:curl -sSL -o install-ppdm.sh https://pmm.parlz.com/install-ppdm.sh && bash install-ppdm.sh +# +# 下载官方 release 的 ppdm 二进制并安装到 ~/.ppdm/bin/ppdm(与 `ppdm update` 同一路径), +# 并把 ~/.ppdm/bin prepend 到 PATH。 +set -e +REPO="JGZYES/ParlzPackageManger" + +# ---- 检测平台 ---- +OS="$(uname -s)"; ARCH="$(uname -m)" +case "$OS" in + Linux) os=linux ;; + Darwin) os=macos ;; + *) echo "ppdm: 不支持的平台 $OS"; exit 1 ;; +esac +case "$ARCH" in + x86_64|amd64) arch=amd64; ASSET="ppdm" ;; + aarch64|arm64) arch=arm64; ASSET="ppdm-aarch64" ;; + *) echo "ppdm: 不支持的架构 $ARCH"; exit 1 ;; +esac + +# ---- 下载 ---- +URL="https://github.com/$REPO/releases/latest/download/$ASSET" +echo "ppdm: 下载 ppdm-$arch ($os) ..." +TMP="$(mktemp)" +if ! curl -fL --progress-bar --max-time 300 -o "$TMP" "$URL"; then + rm -f "$TMP" + echo "ppdm: 下载失败($URL)" + if [ "$ASSET" = "ppdm-aarch64" ]; then + echo "ppdm: 若该资产暂未发布,可先构建(gcc src/ppdm.c ...)或稍后再试。" + fi + exit 1 +fi +echo "" +chmod +x "$TMP" + +# ---- 安装到 ~/.ppdm/bin/ppdm(与 ppdm update 一致)---- +DEST="${HOME}/.ppdm/bin/ppdm" +mkdir -p "$(dirname "$DEST")" +cp "$TMP" "$DEST" && chmod +x "$DEST" && rm -f "$TMP" + +# ---- 把 ~/.ppdm/bin prepend 进 ~/.bashrc ---- +DEST_DIR="$(dirname "$DEST")" +RC="$HOME/.bashrc" +if [ -e "$RC" ] || [ -w "$HOME" ]; then + if ! grep -qF "export PATH=\"$DEST_DIR:" "$RC" 2>/dev/null; then + printf 'export PATH="%s:$PATH"\n' "$DEST_DIR" >> "$RC" 2>/dev/null || true + fi +fi +hash -r 2>/dev/null || true + +echo "" +echo "ppdm: 安装完成 -> $DEST" +"$DEST" -v 2>/dev/null || true + +case ":$PATH:" in + *":$DEST_DIR:"*) ;; + *) echo "ppdm: 当前 shell 请执行: export PATH=\"$DEST_DIR:\$PATH\" && hash -r" ;; +esac diff --git a/web/install-ppdm.sh b/web/install-ppdm.sh new file mode 100644 index 0000000..411acb0 --- /dev/null +++ b/web/install-ppdm.sh @@ -0,0 +1,63 @@ +#!/bin/sh +# ppdm (ParlzPackageDevManager) — Linux/macOS one-line installer. +# +# 用法: +# curl -sSL https://pmm.parlz.com/download/install-ppdm.sh | bash +# 或:curl -sSL -o install-ppdm.sh https://pmm.parlz.com/install-ppdm.sh && bash install-ppdm.sh +# +# 下载官方 release 的 ppdm 二进制并安装到 ~/.ppdm/bin/ppdm(与 `ppdm update` 同一路径), +# 并把 ~/.ppdm/bin prepend 到 PATH。 +set -e +REPO="JGZYES/ParlzPackageManger" + +# ---- 检测平台 ---- +OS="$(uname -s)"; ARCH="$(uname -m)" +case "$OS" in + Linux) os=linux ;; + Darwin) os=macos ;; + *) echo "ppdm: 不支持的平台 $OS"; exit 1 ;; +esac +case "$ARCH" in + x86_64|amd64) arch=amd64; ASSET="ppdm" ;; + aarch64|arm64) arch=arm64; ASSET="ppdm-aarch64" ;; + *) echo "ppdm: 不支持的架构 $ARCH"; exit 1 ;; +esac + +# ---- 下载 ---- +URL="https://github.com/$REPO/releases/latest/download/$ASSET" +echo "ppdm: 下载 ppdm-$arch ($os) ..." +TMP="$(mktemp)" +if ! curl -fL --progress-bar --max-time 300 -o "$TMP" "$URL"; then + rm -f "$TMP" + echo "ppdm: 下载失败($URL)" + if [ "$ASSET" = "ppdm-aarch64" ]; then + echo "ppdm: 若该资产暂未发布,可先构建(gcc src/ppdm.c ...)或稍后再试。" + fi + exit 1 +fi +echo "" +chmod +x "$TMP" + +# ---- 安装到 ~/.ppdm/bin/ppdm(与 ppdm update 一致)---- +DEST="${HOME}/.ppdm/bin/ppdm" +mkdir -p "$(dirname "$DEST")" +cp "$TMP" "$DEST" && chmod +x "$DEST" && rm -f "$TMP" + +# ---- 把 ~/.ppdm/bin prepend 进 ~/.bashrc ---- +DEST_DIR="$(dirname "$DEST")" +RC="$HOME/.bashrc" +if [ -e "$RC" ] || [ -w "$HOME" ]; then + if ! grep -qF "export PATH=\"$DEST_DIR:" "$RC" 2>/dev/null; then + printf 'export PATH="%s:$PATH"\n' "$DEST_DIR" >> "$RC" 2>/dev/null || true + fi +fi +hash -r 2>/dev/null || true + +echo "" +echo "ppdm: 安装完成 -> $DEST" +"$DEST" -v 2>/dev/null || true + +case ":$PATH:" in + *":$DEST_DIR:"*) ;; + *) echo "ppdm: 当前 shell 请执行: export PATH=\"$DEST_DIR:\$PATH\" && hash -r" ;; +esac