镜像自地址
https://github.com/JGZYES/ParlzPackageManger.git
已同步 2026-09-11 05:42:44 +08:00
- pmm 0.6.0: 结构化错误码(见前), 站点 PMM_VERSION + install.sh 版本 + 文档版本 - ppdm 0.0.2: 新增 list/del 命令(客户端) + web/ppdm/list.php/del.php 后端 - CI: ppdm 构建版本 0.0.1 -> 0.0.2 - docs: ppdm.md 加 list/del, download/install 文档 0.5.6 -> 0.6.0 - CHANGELOG 0.6.0 增 ppdm 0.0.2 全量发布说明
215 行
9.1 KiB
YAML
215 行
9.1 KiB
YAML
name: build
|
|
|
|
on:
|
|
push:
|
|
tags:
|
|
- 'v*'
|
|
workflow_dispatch:
|
|
inputs:
|
|
version:
|
|
description: 'Version to build (defaults to dev)'
|
|
required: false
|
|
default: dev
|
|
|
|
permissions:
|
|
contents: write
|
|
|
|
jobs:
|
|
build:
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
include:
|
|
- target: windows-amd64
|
|
cc: x86_64-w64-mingw32-gcc
|
|
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:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Install toolchain
|
|
if: ${{ matrix.pkg != '' }}
|
|
run: |
|
|
sudo apt-get update
|
|
sudo apt-get install -y ${{ matrix.pkg }}
|
|
|
|
- name: Build pmm
|
|
run: |
|
|
mkdir -p out
|
|
VER=${{ github.ref_type == 'tag' && github.ref_name || (github.event.inputs.version != '' && github.event.inputs.version || 'dev') }}
|
|
VER=${VER#v}
|
|
${{ matrix.cc }} -O2 -Wall -static -std=c11 -D_GNU_SOURCE -D_FORTIFY_SOURCE=0 -U_FORTIFY_SOURCE -DPMM_VERSION=\"$VER\" -o out/${{ matrix.bin }} \
|
|
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/list/del/update/pack/publish) — own version 0.0.2
|
|
${{ matrix.cc }} -O2 -Wall -static -std=c11 -D_GNU_SOURCE -D_FORTIFY_SOURCE=0 -U_FORTIFY_SOURCE -DPPDM_VERSION=\"0.0.2\" -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
|
|
|
|
- name: Package installers
|
|
run: |
|
|
sudo apt-get update >/dev/null 2>&1
|
|
sudo apt-get install -y zip dpkg-dev xxd rpm zstd imagemagick >/dev/null 2>&1 || true
|
|
VER=${{ github.ref_type == 'tag' && github.ref_name || (github.event.inputs.version != '' && github.event.inputs.version || 'dev') }}
|
|
VER=${VER#v}
|
|
|
|
# -- 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
|
|
rm -rf pdm && mkdir -p pdm/meta pdm/data/usr/local/bin
|
|
cp out/pmm-aarch64 pdm/data/usr/local/bin/pmm
|
|
{
|
|
echo "Package: pmm"
|
|
echo "Version: $VER"
|
|
echo "Architecture: linux"
|
|
echo "Description: PMM package manager"
|
|
echo "Maintainer: PMM <packages@pmm.dev>"
|
|
} > pdm/meta/pdm-control
|
|
( cd pdm/meta && tar -czf ../control.tar.gz pdm-control )
|
|
( cd pdm/data && tar -czf ../data.tar.gz . )
|
|
( cd pdm && sha256sum control.tar.gz data.tar.gz > sha256sums )
|
|
( cd pdm && tar -cf ../out/pmm-${VER}-linux-aarch64.pdm control.tar.gz data.tar.gz sha256sums )
|
|
rm -rf pdm
|
|
fi
|
|
|
|
# -- Windows: ZIP
|
|
if [ -f out/pmm.exe ]; then
|
|
( cd out && zip -q "pmm-${VER}-windows-amd64.zip" pmm.exe )
|
|
fi
|
|
|
|
# -- Linux: .deb
|
|
if [ -f out/pmm ]; then
|
|
rm -rf pkg && mkdir -p pkg/DEBIAN pkg/usr/local/bin
|
|
cp out/pmm pkg/usr/local/bin/pmm
|
|
SIZE=$(du -k pkg/usr/local/bin/pmm | cut -f1)
|
|
DEBVER="$VER"
|
|
case "$DEBVER" in [0-9]*) ;; *) DEBVER="0.0.0-dev" ;; esac # dpkg needs a digit-leading version
|
|
{
|
|
echo "Package: pmm"
|
|
echo "Version: $DEBVER"
|
|
echo "Section: devel"
|
|
echo "Priority: optional"
|
|
echo "Architecture: amd64"
|
|
echo "Maintainer: PMM <packages@pmm.dev>"
|
|
echo "Installed-Size: $SIZE"
|
|
echo "Description: ParlzPackageManager (PMM) - cross-platform C package manager"
|
|
echo " A cross-platform (Windows/Linux/macOS) package manager written in C, with"
|
|
echo " apt-style multi-mirror (mirror.ini), git release installs, .pdm packages"
|
|
echo " and SHA-256/SHA-1 verification."
|
|
} > pkg/DEBIAN/control
|
|
( cd pkg/usr/local/bin && md5sum pmm ) | sed 's# pmm# usr/local/bin/pmm#' > pkg/DEBIAN/md5sums
|
|
dpkg-deb --build -Zgzip --root-owner-group pkg "out/pmm_${VER}_amd64.deb"
|
|
rm -rf pkg
|
|
|
|
# -- Linux: .rpm
|
|
mkdir -p rpms/{BUILD,RPMS,SOURCES,SPECS}
|
|
cp out/pmm rpms/SOURCES/pmm
|
|
{
|
|
echo "Name: pmm"
|
|
echo "Version: $VER"
|
|
echo "Release: 1"
|
|
echo "Summary: ParlzPackageManager (PMM) - cross-platform C package manager"
|
|
echo "License: GPL-3.0"
|
|
echo "BuildArch: x86_64"
|
|
echo ""
|
|
echo "%description"
|
|
echo "A cross-platform (Windows/Linux/macOS) package manager written in C,"
|
|
echo "with apt-style multi-mirror, git release installs and .pdm packages."
|
|
echo "%install"
|
|
echo "mkdir -p %{buildroot}/usr/local/bin"
|
|
echo "install -m 0755 %{_sourcedir}/pmm %{buildroot}/usr/local/bin/pmm"
|
|
echo "%files"
|
|
echo "/usr/local/bin/pmm"
|
|
} > rpms/SPECS/pmm.spec
|
|
rpmbuild -bb --define "_topdir $PWD/rpms" --define "_sourcedir $PWD/rpms/SOURCES" rpms/SPECS/pmm.spec
|
|
find rpms -name '*.rpm' -exec mv {} out/ \;
|
|
rm -rf rpms
|
|
|
|
# -- Alpine .apk (gzip'd tar: .PKGINFO + usr/bin/pmm)
|
|
rm -rf apk && mkdir -p apk/usr/bin
|
|
cp out/pmm apk/usr/bin/pmm
|
|
{
|
|
echo "pkgname = pmm"
|
|
echo "pkgver = $VER"
|
|
echo "pkgdesc = ParlzPackageManager (PMM) - cross-platform C package manager"
|
|
echo "url = https://pmm.parlz.com"
|
|
echo "arch = x86_64"
|
|
echo "license = GPL-3.0"
|
|
echo "size = $(stat -c%s out/pmm)"
|
|
} > apk/.PKGINFO
|
|
( cd apk && tar -czf "../out/pmm-${VER}.apk" .PKGINFO usr )
|
|
rm -rf apk
|
|
|
|
# -- Arch .pkg.tar.zst (tar zstd: .PKGINFO + usr/bin/pmm)
|
|
rm -rf pk && mkdir -p pk/usr/bin
|
|
cp out/pmm pk/usr/bin/pmm
|
|
{
|
|
echo "pkgname = pmm"
|
|
echo "pkgver = $VER-1"
|
|
echo "pkgdesc = ParlzPackageManager (PMM)"
|
|
echo "url = https://pmm.parlz.com"
|
|
echo "arch = x86_64"
|
|
echo "license = GPL-3.0"
|
|
} > pk/.PKGINFO
|
|
( cd pk && tar --use-compress-program=zstd -cf "../out/pmm-${VER}-1-x86_64.pkg.tar.zst" .PKGINFO usr )
|
|
rm -rf pk
|
|
|
|
# -- AppImage (single-file): AppDir + appimagetool
|
|
rm -rf AppDir && mkdir -p AppDir/usr/bin AppDir/usr/share/applications AppDir/usr/share/icons/hicolor/256x256/apps
|
|
cp out/pmm AppDir/usr/bin/pmm
|
|
printf '#!/bin/sh\nSELF=$(readlink -f "$0"); APPDIR=$(dirname "$SELF")\nexec "$APPDIR/usr/bin/pmm" "$@"\n' > AppDir/AppRun
|
|
chmod +x AppDir/AppRun
|
|
printf '[Desktop Entry]\nName=PMM\nExec=pmm\nType=Application\nIcon=pmm\nCategories=Development;\n' > AppDir/usr/share/applications/pmm.desktop
|
|
if command -v convert >/dev/null 2>&1; then
|
|
convert -size 256x256 xc:"#111111" -fill white -pointsize 90 -gravity center -annotate 0 "pmm" \
|
|
AppDir/usr/share/icons/hicolor/256x256/apps/pmm.png 2>/dev/null || true
|
|
fi
|
|
if [ ! -s AppDir/usr/share/icons/hicolor/256x256/apps/pmm.png ]; then
|
|
printf 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNk+M8AAAMBAQDJ/aLvAAAAAElFTkSuQmCC' | base64 -d > AppDir/usr/share/icons/hicolor/256x256/apps/pmm.png 2>/dev/null || true
|
|
fi
|
|
if [ ! -x /tmp/appimagetool ]; then
|
|
curl -fsSL -o /tmp/appimagetool https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-x86_64.AppImage 2>/dev/null || true
|
|
chmod +x /tmp/appimagetool 2>/dev/null || true
|
|
fi
|
|
if [ -x /tmp/appimagetool ]; then
|
|
( cd AppDir && /tmp/appimagetool --appimage-extract-and-run -n . "../out/pmm-${VER}-x86_64.AppImage" 2>/dev/null ) || true
|
|
fi
|
|
rm -rf AppDir
|
|
fi
|
|
|
|
- name: Upload artifact
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: ${{ matrix.target }}
|
|
path: out/*
|
|
if-no-files-found: error
|
|
|
|
- name: Release (tagged)
|
|
if: startsWith(github.ref, 'refs/tags/')
|
|
uses: softprops/action-gh-release@v2
|
|
with:
|
|
files: out/*
|
|
generate_release_notes: true
|
|
name: PMM ${{ github.ref_name }}
|