hyperchat/.github/workflows/check-version.yml

66 lines
2.6 KiB
YAML

name: 检查版本
on:
workflow_call:
outputs:
should_release:
description: "是否需要发布新版本"
value: ${{ jobs.check.outputs.should_release }}
package_version:
description: "package.json 的版本"
value: ${{ jobs.check.outputs.package_version }}
jobs:
check:
runs-on: ubuntu-latest
outputs:
should_release: ${{ steps.compare-versions.outputs.should_release }}
package_version: ${{ steps.package-version.outputs.package_version }}
steps:
- uses: actions/checkout@v3
- name: 获取package.json版本
id: package-version
run: |
PACKAGE_VERSION=$(node -p "require('./package.json').version")
echo "package_version=$PACKAGE_VERSION" >> $GITHUB_OUTPUT
- name: 获取最新release版本
id: latest-release
run: |
LATEST_RELEASE=$(curl -s https://api.github.com/repos/${{ github.repository }}/releases/latest | jq -r '.tag_name' | sed 's/^v//')
echo "latest_release=${LATEST_RELEASE:-''}" >> $GITHUB_OUTPUT
continue-on-error: true
- name: 获取npm上的最新版本
id: npm-version
run: |
PACKAGE_NAME=$(node -p "require('./package.json').name")
NPM_VERSION=$(npm view $PACKAGE_NAME version 2>/dev/null || echo "")
echo "npm_version=${NPM_VERSION:-''}" >> $GITHUB_OUTPUT
continue-on-error: true
- name: 比较版本
id: compare-versions
run: |
PACKAGE_VERSION="${{ steps.package-version.outputs.package_version }}"
LATEST_RELEASE="${{ steps.latest-release.outputs.latest_release }}"
NPM_VERSION="${{ steps.npm-version.outputs.npm_version }}"
echo "Package version from package.json: $PACKAGE_VERSION"
echo "Latest GitHub release version: $LATEST_RELEASE"
echo "Latest NPM registry version: $NPM_VERSION"
# Check if we need to release based on version comparisons
if [ -z "$LATEST_RELEASE" ] || [ "$LATEST_RELEASE" = "null" ] || [ "$PACKAGE_VERSION" != "$LATEST_RELEASE" ]; then
if [ -z "$NPM_VERSION" ] || [ "$NPM_VERSION" = "null" ] || [ "$PACKAGE_VERSION" != "$NPM_VERSION" ]; then
echo "New version detected, should release"
echo "should_release=true" >> $GITHUB_OUTPUT
else
echo "Package version already on NPM, skipping release"
echo "should_release=false" >> $GITHUB_OUTPUT
fi
else
echo "Package version matches an existing release, skipping"
echo "should_release=false" >> $GITHUB_OUTPUT
fi