####### 可解析的提交前缀 ######## # ci: 持续集成 # fix: 修改 # feat: 新增 # refactor: 重构 # docs: 文档 # style: 样式 # chore: 其他 # build: 构建 # pref: 优化 # test: 测试 ############################### name: Create Release on: push: tags: - 'v6.*' - 'v8.*' permissions: contents: write concurrency: group: release-${{ github.ref_name }} cancel-in-progress: false jobs: verify: if: github.repository == 'zoujingli/ThinkAdmin' runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 with: fetch-depth: 0 - name: Setup PHP uses: shivammathur/setup-php@v2 with: php-version: '8.1' extensions: bcmath, curl, gd, mbstring, openssl coverage: none - name: Install dependencies run: composer install --no-interaction --prefer-dist --no-progress - name: Run tests run: composer test - name: Run static analysis run: | if php -r '$composer=json_decode(file_get_contents("composer.json"), true); exit(isset($composer["scripts"]["analyse"]) ? 0 : 1);'; then composer analyse else echo "No composer analyse script, skip." fi release: if: github.repository == 'zoujingli/ThinkAdmin' needs: - verify runs-on: ubuntu-latest env: SSH_PRIVATE_KEY: ${{ secrets.SPLIT_PRIVATE_KEY }} steps: - name: Checkout code uses: actions/checkout@v4 with: fetch-depth: 0 - name: Resolve Release Context run: | CURRENT_TAG="${GITHUB_REF_NAME}" case "$CURRENT_TAG" in v6.*) MAJOR="6"; RELEASE_BRANCH="v6-dev" ;; v8.*) MAJOR="8"; RELEASE_BRANCH="v8-dev" ;; *) echo "Unsupported release tag: $CURRENT_TAG" >&2; exit 1 ;; esac git fetch origin "+refs/heads/${RELEASE_BRANCH}:refs/remotes/origin/${RELEASE_BRANCH}" TAG_COMMIT="$(git rev-list -n 1 "$CURRENT_TAG")" BRANCH_HEAD="$(git rev-parse "refs/remotes/origin/${RELEASE_BRANCH}")" git merge-base --is-ancestor "$TAG_COMMIT" "$BRANCH_HEAD" if [ "$TAG_COMMIT" != "$BRANCH_HEAD" ]; then echo "Tag ${CURRENT_TAG} must point to latest ${RELEASE_BRANCH} head." >&2 echo "Tag commit: ${TAG_COMMIT}" >&2 echo "Branch head: ${BRANCH_HEAD}" >&2 exit 1 fi PREVIOUS_TAG=$(git describe --tags --abbrev=0 --match "v${MAJOR}.*" "${TAG_COMMIT}^" 2>/dev/null || true) echo "CURRENT_TAG=$CURRENT_TAG" >> "$GITHUB_ENV" echo "PREVIOUS_TAG=$PREVIOUS_TAG" >> "$GITHUB_ENV" echo "RELEASE_BRANCH=$RELEASE_BRANCH" >> "$GITHUB_ENV" - name: Generate Release Notes run: python .github/generate-release-notes.py - name: Setup Private Key run: | test -n "$SSH_PRIVATE_KEY" mkdir -p ~/.ssh echo "$SSH_PRIVATE_KEY" > ~/.ssh/id_rsa chmod 600 ~/.ssh/id_rsa ssh-keyscan github.com >> ~/.ssh/known_hosts echo "StrictHostKeyChecking no" >> ~/.ssh/config - name: Split Plugin Tags run: ./.github/release.sh "${CURRENT_TAG}" "${RELEASE_BRANCH}" - name: Create Release uses: softprops/action-gh-release@v2 with: tag_name: ${{ env.CURRENT_TAG }} name: Release ${{ env.CURRENT_TAG }} body_path: log/${{ env.CURRENT_TAG }}.md draft: false prerelease: ${{ contains(env.CURRENT_TAG, '-') }}