Compare commits
2 commits
11c00b9d55
...
f30df6fd59
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f30df6fd59 | ||
|
|
2f84a2747c |
1 changed files with 77 additions and 6 deletions
|
|
@ -1,6 +1,7 @@
|
||||||
# 文派统一插件发布 CI Workflow
|
# 文派统一插件发布 CI Workflow
|
||||||
# 触发:push tag v*
|
# 触发:push tag v*
|
||||||
# 运行环境:forgejo-ci-php:latest (Alpine + php-cli + git + rsync + zip + node)
|
# 运行环境:forgejo-ci-php:latest (Alpine + php-cli + git + rsync + zip + node)
|
||||||
|
# 基于 ci-workflows/wp-release.yml 2026-02-18 版本
|
||||||
name: Release Plugin
|
name: Release Plugin
|
||||||
|
|
||||||
on:
|
on:
|
||||||
|
|
@ -17,17 +18,18 @@ jobs:
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
- name: Verify tools
|
- name: Verify tools
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
set -euo pipefail
|
php -v | head -1 || true
|
||||||
php -v | head -1
|
|
||||||
git --version
|
git --version
|
||||||
rsync --version | head -1
|
rsync --version | head -1 || true
|
||||||
zip --version | head -2
|
zip --version | head -2 || true
|
||||||
jq --version
|
jq --version
|
||||||
curl --version | head -1
|
curl --version | head -1 || true
|
||||||
|
|
||||||
- name: Extract version from tag
|
- name: Extract version from tag
|
||||||
id: version
|
id: version
|
||||||
|
|
@ -74,6 +76,58 @@ jobs:
|
||||||
fi
|
fi
|
||||||
echo "Version consistency check passed: $VERSION"
|
echo "Version consistency check passed: $VERSION"
|
||||||
|
|
||||||
|
- name: Generate Changelog
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
set -euo pipefail
|
||||||
|
TAG="${GITHUB_REF#refs/tags/}"
|
||||||
|
|
||||||
|
PREV_TAG=$(git tag --sort=-version:refname | grep -E '^v' | grep -v "^${TAG}$" | head -1)
|
||||||
|
|
||||||
|
if [ -n "$PREV_TAG" ]; then
|
||||||
|
echo "Changelog: ${PREV_TAG}..${TAG}"
|
||||||
|
COMMITS=$(git log "${PREV_TAG}..${TAG}" --no-merges --pretty=format:"%s (%h)" 2>/dev/null || true)
|
||||||
|
else
|
||||||
|
echo "Changelog: first release, using all commits"
|
||||||
|
COMMITS=$(git log --no-merges --pretty=format:"%s (%h)" 2>/dev/null || true)
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z "$COMMITS" ]; then
|
||||||
|
: > /tmp/changelog.md
|
||||||
|
echo "No commits found for changelog"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
FEAT="" FIX="" OTHER=""
|
||||||
|
while IFS= read -r line; do
|
||||||
|
case "$line" in
|
||||||
|
feat:*|feat\(*) FEAT="${FEAT}\n- ${line}" ;;
|
||||||
|
fix:*|fix\(*) FIX="${FIX}\n- ${line}" ;;
|
||||||
|
*) OTHER="${OTHER}\n- ${line}" ;;
|
||||||
|
esac
|
||||||
|
done <<< "$COMMITS"
|
||||||
|
|
||||||
|
CHANGELOG=""
|
||||||
|
HAS_CATEGORIES=false
|
||||||
|
if [ -n "$FEAT" ]; then
|
||||||
|
CHANGELOG="${CHANGELOG}#### New Features${FEAT}\n\n"
|
||||||
|
HAS_CATEGORIES=true
|
||||||
|
fi
|
||||||
|
if [ -n "$FIX" ]; then
|
||||||
|
CHANGELOG="${CHANGELOG}#### Bug Fixes${FIX}\n\n"
|
||||||
|
HAS_CATEGORIES=true
|
||||||
|
fi
|
||||||
|
if [ -n "$OTHER" ]; then
|
||||||
|
if [ "$HAS_CATEGORIES" = true ]; then
|
||||||
|
CHANGELOG="${CHANGELOG}#### Other Changes${OTHER}\n\n"
|
||||||
|
else
|
||||||
|
CHANGELOG="${OTHER#\\n}\n\n"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
printf '%b' "$CHANGELOG" > /tmp/changelog.md
|
||||||
|
echo "Changelog generated ($(echo "$COMMITS" | wc -l) commits)"
|
||||||
|
|
||||||
- name: PHP Lint
|
- name: PHP Lint
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
|
|
@ -119,6 +173,7 @@ jobs:
|
||||||
--exclude="vendor" \
|
--exclude="vendor" \
|
||||||
--exclude="tests" \
|
--exclude="tests" \
|
||||||
--exclude="docs" \
|
--exclude="docs" \
|
||||||
|
--exclude="lib" \
|
||||||
--exclude="phpunit.xml*" \
|
--exclude="phpunit.xml*" \
|
||||||
--exclude="phpcs.xml*" \
|
--exclude="phpcs.xml*" \
|
||||||
--exclude="phpstan.neon*" \
|
--exclude="phpstan.neon*" \
|
||||||
|
|
@ -177,7 +232,23 @@ jobs:
|
||||||
SHA256="${{ steps.checksum.outputs.sha256 }}"
|
SHA256="${{ steps.checksum.outputs.sha256 }}"
|
||||||
API_URL="${GITHUB_SERVER_URL%/}/api/v1/repos/${GITHUB_REPOSITORY}"
|
API_URL="${GITHUB_SERVER_URL%/}/api/v1/repos/${GITHUB_REPOSITORY}"
|
||||||
AUTH_HEADER="Authorization: token ${AUTH_TOKEN}"
|
AUTH_HEADER="Authorization: token ${AUTH_TOKEN}"
|
||||||
printf -v RELEASE_NOTES '## %s %s\n\n### Checksums\n\n| File | SHA-256 |\n|------|---------|\n| %s | %s |\n' "$SLUG" "$TAG" "$ZIP_NAME" "$SHA256"
|
|
||||||
|
{
|
||||||
|
echo "## ${SLUG} ${TAG}"
|
||||||
|
echo ""
|
||||||
|
CHANGELOG_FILE="/tmp/changelog.md"
|
||||||
|
if [ -f "$CHANGELOG_FILE" ] && [ -s "$CHANGELOG_FILE" ]; then
|
||||||
|
echo "### What's Changed"
|
||||||
|
echo ""
|
||||||
|
cat "$CHANGELOG_FILE"
|
||||||
|
fi
|
||||||
|
echo "### Checksums"
|
||||||
|
echo ""
|
||||||
|
echo "| File | SHA-256 |"
|
||||||
|
echo "|------|---------|"
|
||||||
|
echo "| ${ZIP_NAME} | ${SHA256} |"
|
||||||
|
} > /tmp/release-notes.md
|
||||||
|
RELEASE_NOTES=$(cat /tmp/release-notes.md)
|
||||||
|
|
||||||
echo ">>> Resolving release ${TAG}"
|
echo ">>> Resolving release ${TAG}"
|
||||||
STATUS=$(curl -sS -o /tmp/release.json -w "%{http_code}" \
|
STATUS=$(curl -sS -o /tmp/release.json -w "%{http_code}" \
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue