on: push: # Sequence of patterns matched against refs/tags tags: - 'v*' # Push events to matching v*, i.e. v1.0, v20.15.10 name: Create Release permissions: write-all jobs: release: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 with: fetch-depth: 0 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: 18 - name: Install dependencies run: npm install -g gen-git-log - name: Find Last Tag id: last_tag run: | # 获取所有标签,按版本排序(降序) Tags=$(git tag --list --sort=-version:refname) # 获取最新的标签(即列表中的第一个) LATEST_TAG=$(echo "$Tags" | awk 'NR==1 {print $1; exit}') # 获取倒数第二个标签(如果存在) if [[ -n "$Tags" ]]; then # 使用 tail 获取除了最后一个标签之外的所有标签,然后用 head 获取第一个 SECOND_LATEST_TAG=$(echo "$Tags" | tail -n +2 | head -n 1) else SECOND_LATEST_TAG="" fi # 设置输出变量 echo "::set-output name=tag_last::${LATEST_TAG:-v1.0.0}" echo "::set-output name=tag_second::${SECOND_LATEST_TAG:-v1.0.0}" - name: Generate Release Notes run: | rm -rf log newTag=${{ steps.last_tag.outputs.tag_last }} git-log -m tag -f -S ${{ steps.last_tag.outputs.tag_second }} -v ${newTag#v} - name: Create Release id: create_release uses: actions/create-release@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: tag_name: ${{ steps.last_tag.outputs.tag_last }} release_name: Release ${{ steps.last_tag.outputs.tag_last }} body_path: log/${{steps.last_tag.outputs.tag_last}}.md draft: false prerelease: false