diff --git a/.github/workflows/generate-release-notes.yaml b/.github/workflows/generate-release-notes.yaml new file mode 100644 index 000000000..46b8e7897 --- /dev/null +++ b/.github/workflows/generate-release-notes.yaml @@ -0,0 +1,182 @@ +name: Generate Release Notes + +on: + push: + tags: + - "v*.*.*" + workflow_dispatch: ~ + +jobs: + generate-release-notes: + runs-on: ubuntu-latest + env: + DASHSCOPE_API_KEY: ${{ secrets.HIGRESS_OPENAI_API_KEY }} + MODEL_NAME: ${{ secrets.HIGRESS_OPENAI_API_MODEL }} + MODEL_SERVER: ${{ secrets.MODEL_SERVER }} + + steps: + - name: Checkout code + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Setup Go + uses: actions/setup-go@v5 + with: + go-version: 1.24 + + - name: Clone GitHub MCP Server + run: | + git clone https://github.com/github/github-mcp-server.git + cd github-mcp-server + go build -o ../github-mcp-serve ./cmd/github-mcp-server + cd .. + chmod u+x github-mcp-serve + + - name: Setup Python + uses: actions/setup-python@v4 + with: + python-version: "3.10" + + - name: Clone Higress Report Agent + run: | + git clone https://github.com/higress-group/higress-report-agent.git + mv github-mcp-serve higress-report-agent/ + + - name: Create Release Report Script + run: | + cat > generate_release_report.sh << 'EOF' + #!/bin/bash + # Script to generate release notes for Higress projects + + echo "Fetching GitHub generated release notes for ${GITHUB_REPO_OWNER}/${GITHUB_REPO_NAME}..." + curl -L \ + "https://github.com/${GITHUB_REPO_OWNER}/${GITHUB_REPO_NAME}/releases/tag/${RELEASE_VERSION}" \ + -o release_page.html + + echo "Extracting PR numbers from ${GITHUB_REPO_OWNER}/${GITHUB_REPO_NAME} release notes..." + PR_NUMS=$(cat release_page.html | grep -o "/${GITHUB_REPO_OWNER}/${GITHUB_REPO_NAME}/pull/[0-9]*" | grep -o "[0-9]*$" | sort -n | uniq | tr '\n' ',') + PR_NUMS=${PR_NUMS%,} + if [ -z "${PR_NUMS}" ]; then + echo "No PR numbers found in release notes for ${GITHUB_REPO_OWNER}/${GITHUB_REPO_NAME} tag=${RELEASE_VERSION}." + exit 0 + fi + + echo "Identifying important PRs..." + IMPORTANT_PR_NUMS=$(cat release_page.html | grep -o ".*/${GITHUB_REPO_OWNER}/${GITHUB_REPO_NAME}/pull/[0-9]*.*" | grep -o "pull/[0-9]*" | grep -o "[0-9]*" | sort -n | uniq | tr '\n' ',') + IMPORTANT_PR_NUMS=${IMPORTANT_PR_NUMS%,} + + rm release_page.html + + echo "Extracted PR numbers for ${GITHUB_REPO_OWNER}/${GITHUB_REPO_NAME}: ${PR_NUMS}" + echo "Important PR numbers: ${IMPORTANT_PR_NUMS}" + + echo "Generating detailed release notes for ${GITHUB_REPO_OWNER}/${GITHUB_REPO_NAME}..." + cd higress-report-agent + pip install uv + uv sync + if [ -n "${IMPORTANT_PR_NUMS}" ]; then + uv run report_main.py --mode 2 --choice 2 --pr_nums ${PR_NUMS} --important_prs ${IMPORTANT_PR_NUMS} + else + uv run report_main.py --mode 2 --choice 2 --pr_nums ${PR_NUMS} + fi + cp report.md ../ + cp report.EN.md ../ + cd .. + + # 去除版本号前缀v + CLEAN_VERSION=${RELEASE_VERSION#v} + + echo "Creating release notes directory for version ${RELEASE_VERSION}..." + mkdir -p release-notes/${CLEAN_VERSION} + + echo "# ${REPORT_TITLE}" >>release-notes/${CLEAN_VERSION}/README_ZH.md + sed 's/# Release Notes//' report.md >>release-notes/${CLEAN_VERSION}/README_ZH.md + echo "\n" >>release-notes/${CLEAN_VERSION}/README_ZH.md + + echo "# ${REPORT_TITLE}" >>release-notes/${CLEAN_VERSION}/README.md + sed 's/# Release Notes//' report.EN.md >>release-notes/${CLEAN_VERSION}/README.md + echo "\n" >>release-notes/${CLEAN_VERSION}/README.md + + rm report.md + rm report.EN.md + echo "${REPORT_TITLE} release notes saved to release-notes/${CLEAN_VERSION}/" + + EOF + chmod +x generate_release_report.sh + + - name: Generate Release Notes for Higress + env: + GITHUB_REPO_OWNER: alibaba + GITHUB_REPO_NAME: higress + GITHUB_PERSONAL_ACCESS_TOKEN: ${{ secrets.GITHUB_TOKEN }} + REPORT_TITLE: Higress + run: | + export RELEASE_VERSION=$(cat ${GITHUB_WORKSPACE}/VERSION) + bash generate_release_report.sh + + - name: Generate Release Notes for Higress Console + env: + GITHUB_REPO_OWNER: higress-group + GITHUB_REPO_NAME: higress-console + GITHUB_PERSONAL_ACCESS_TOKEN: ${{ secrets.GITHUB_TOKEN }} + REPORT_TITLE: Higress Console + run: | + export RELEASE_VERSION=$(grep "^higress-console:" ${GITHUB_WORKSPACE}/DEP_VERSION | head -n1 | sed 's/higress-console: //') + bash generate_release_report.sh + + - name: Create Update Release Notes Script + run: | + cat > update_release_note.sh << 'EOF' + #!/bin/bash + CLEAN_VERSION=${RELEASE_VERSION#v} + + RELEASE_INFO=$(curl -s -L \ + -H "Accept: application/vnd.github+json" \ + -H "Authorization: Bearer ${GITHUB_TOKEN}" \ + -H "X-GitHub-Api-Version: 2022-11-28" \ + https://api.github.com/repos/${GITHUB_REPO_OWNER}/${GITHUB_REPO_NAME}/releases/tags/${RELEASE_VERSION}) + RELEASE_ID=$(echo $RELEASE_INFO | jq -r .id) + + RELEASE_NOTES=$(cat release-notes/${CLEAN_VERSION}/README.md | awk '{printf "%s\\r\\n", $0}') + + curl -L \ + -X PATCH \ + -H "Accept: application/vnd.github+json" \ + -H "Authorization: Bearer ${GITHUB_TOKEN}" \ + -H "X-GitHub-Api-Version: 2022-11-28" \ + https://api.github.com/repos/${GITHUB_REPO_OWNER}/${GITHUB_REPO_NAME}/releases/${RELEASE_ID} \ + -d "{\"tag_name\":\"${RELEASE_VERSION}\",\"name\":\"${RELEASE_VERSION}\",\"body\":\"${RELEASE_NOTES}\",\"draft\":false,\"prerelease\":false}" + + EOF + chmod +x update_release_note.sh + + - name: Update Release Notes + env: + GITHUB_REPO_OWNER: alibaba + GITHUB_REPO_NAME: higress + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + export RELEASE_VERSION=$(cat ${GITHUB_WORKSPACE}/VERSION) + bash update_release_note.sh + + - name: Clean + run: | + rm generate_release_report.sh + rm update_release_note.sh + rm -rf higress-report-agent + rm -rf github-mcp-server + + - name: Create Pull Request + uses: peter-evans/create-pull-request@v7 + with: + token: ${{ secrets.GITHUB_TOKEN }} + commit-message: "Add release notes" + branch: add-release-notes + title: "Add release notes" + body: | + This PR adds release notes. + + - Automatically generated by GitHub Actions + labels: release notes, automated + base: main diff --git a/DEP_VERSION b/DEP_VERSION new file mode 100644 index 000000000..791013055 --- /dev/null +++ b/DEP_VERSION @@ -0,0 +1 @@ +higress-console: v2.1.5 \ No newline at end of file