diff options
author | Luqman <luqazino@gmail.com> | 2024-02-08 10:38:06 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-02-08 09:38:06 +0000 |
commit | 7d668b10c87a8d8909459bc7ee0e9f28b981da15 (patch) | |
tree | d32940b4e51ac764c3f4e156a2d1f11bc885257a | |
parent | 8e445fead096767d69471795c0d98e2a90c26be2 (diff) |
Final Implementation of Changelog V2 (#6050)
* Updated the release drafter to process the released changelog for OpenBB Platform
* Update release drafter configuration
* Add OpenBB Documentation Changes and Create Release
* Update process_changelog.py path in draft-release.yml
* Update release-drafter version and save changelog
* Copy changelog with python
* Update draft-release.yml to save Changelog
* Update draft-release.yml
* Encode and save Changelog to Base64
* Update Changelog saving method
* Update Changelog format
* Update CHANGELOG.md with release notes
* Fix draft release workflow
* Add cat command to print CHANGELOG.md
* Add platform-drafter.yml and update release-drafter.yml and draft-release.yml
* Commented out config-name in release-drafter step
* Update branch name validation and process_changelog.py
* Refactor process_changelog.py to improve readability and maintainability
* Refactor process_changelog.py to handle file I/O errors and remove duplicate PR entries
---------
Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com>
-rw-r--r-- | .github/labeler.yml | 3 | ||||
-rw-r--r-- | .github/platform-drafter.yml | 48 | ||||
-rw-r--r-- | .github/release-drafter.yml | 5 | ||||
-rw-r--r-- | .github/workflows/branch-name-check.yml | 2 | ||||
-rw-r--r-- | .github/workflows/draft-release.yml | 42 | ||||
-rw-r--r-- | process_changelog.py | 82 |
6 files changed, 179 insertions, 3 deletions
diff --git a/.github/labeler.yml b/.github/labeler.yml index b0008ca1a2e..c785bb7c01e 100644 --- a/.github/labeler.yml +++ b/.github/labeler.yml @@ -15,6 +15,9 @@ labels: - label: "bug" branch: "^hotfix/.*" + - label: "bug" + branch: "^bugfix/.*" + - label: "docs" branch: "^docs/.*" diff --git a/.github/platform-drafter.yml b/.github/platform-drafter.yml new file mode 100644 index 00000000000..537dee2e822 --- /dev/null +++ b/.github/platform-drafter.yml @@ -0,0 +1,48 @@ +name-template: 'OpenBB Platform v$NEXT_MINOR_VERSION' +tag-template: 'v$NEXT_MINOR_VERSION' +categories: + - title: 🦋 OpenBB Platform Enhancements + labels: + - 'platform' + - 'v4' + - title: 🐛 OpenBB Platform Bug Fixes + labels: + - 'bug' + - title: 📚 OpenBB Documentation Changes + labels: + - 'docs' +include-labels: + - 'platform' + - 'v4' +change-template: '- $TITLE @$AUTHOR (#$NUMBER)' +change-title-escapes: '\<*_&' +exclude-contributors: + - 'jmaslek' + - 'DidierRLopes' + - 'deeleeramone' + - 'hjoaquim' + - 'jose-donato' + - 'luqmanbello' + - 'montezdesousa' + - 'tehcoderer' + - 'colin99d' + - 'piiq' + - 'andrewkenreich' + - 'IgorWounds' + - 'minhhoang1023' + +template: | + ## Thank you and welcome to our new contributors 🔥 + $CONTRIBUTORS + + ## What's new 🎉 + + ## What's changed 🚀 + $CHANGES + + We are proud of our community contributors and staunch supporters of open-source ecosystems. + Help us promote our community by tagging `@openbb_finance` on X with a link to your pull request, + and join our Discord server to chat about your contribution! We want to hear about your experience! + + ### Links 🦋 + [Website](https://openbb.co/), [Twitter](https://twitter.com/openbb_finance), [Linkedin](https://www.linkedin.com/company/openbb-finance), [Instagram](https://www.instagram.com/openbb.finance/), [Reddit](https://www.reddit.com/r/openbb/), [Discord](https://discord.com/invite/xPHTuHCmuV) diff --git a/.github/release-drafter.yml b/.github/release-drafter.yml index 6b3a15ab1b1..296b6e15ba7 100644 --- a/.github/release-drafter.yml +++ b/.github/release-drafter.yml @@ -8,6 +8,11 @@ categories: - title: 🐛 OpenBB Platform Bug Fixes labels: - 'bug' + - title: 📚 OpenBB Documentation Changes + labels: + - 'docs' +change-template: '- $TITLE @$AUTHOR (#$NUMBER)' +change-title-escapes: '\<*_&' exclude-contributors: - 'jmaslek' - 'DidierRLopes' diff --git a/.github/workflows/branch-name-check.yml b/.github/workflows/branch-name-check.yml index f14494487d2..06e987593d4 100644 --- a/.github/workflows/branch-name-check.yml +++ b/.github/workflows/branch-name-check.yml @@ -35,7 +35,7 @@ jobs: - name: Check branch name for develop PRs if: ${{ steps.branch-name-check.outputs.target-branch == 'develop' }} run: | - if [[ "${{ steps.branch-name-check.outputs.source-branch }}" =~ ^(main|feature/.*|docs/.*|hotfix/.*|release/[0-9]+\.[0-9]+\.[0-9]+(rc[0-9]+)?)$ ]]; then + if [[ "${{ steps.branch-name-check.outputs.source-branch }}" =~ ^(main|feature/.*|docs/.*|hotfix/.*|bugfix/.*|release/[0-9]+\.[0-9]+\.[0-9]+(rc[0-9]+)?)$ ]]; then echo "Branch name is valid" else echo "Invalid branch name. Branches must follow the GitFlow naming convention to be allowed to merge into the develop branch." diff --git a/.github/workflows/draft-release.yml b/.github/workflows/draft-release.yml index 51453785c32..51f8ddb7f86 100644 --- a/.github/workflows/draft-release.yml +++ b/.github/workflows/draft-release.yml @@ -1,11 +1,49 @@ name: Release Drafter -on: workflow_dispatch +on: + workflow_dispatch: + inputs: + release_pr_number: + description: 'Release PR Number' + required: true + default: '' + tag: + description: 'Tag for release (manual input)' + required: true + default: '' jobs: update_release_draft: runs-on: ubuntu-latest steps: - - uses: release-drafter/release-drafter@v5.21.0 + - name: 📟 Checkout code + uses: actions/checkout@v4 + + - name: 📝 Release Drafter + id: release-drafter + uses: release-drafter/release-drafter@v6.0.0 + # with: + # config-name: platform-drafter.yml env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: 💾 Save Changelog + run: | + cat << 'EOF' > CHANGELOG.md + ${{ steps.release-drafter.outputs.body }} + EOF + + - name: 🧬 Process Changelog + run: | + python process_changelog.py CHANGELOG.md ${{ github.event.inputs.release_pr_number }} + cat CHANGELOG.md + + - name: 🛫 Create Release + uses: mikepenz/action-gh-release@v1 + with: + body_path: "CHANGELOG.md" + tag_name: ${{ github.event.inputs.tag }} + prerelease: false + draft: true + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
\ No newline at end of file diff --git a/process_changelog.py b/process_changelog.py new file mode 100644 index 00000000000..fbdfdf9ce0b --- /dev/null +++ b/process_changelog.py @@ -0,0 +1,82 @@ +# process_changelog.py +import logging +import re +import sys + +# Set up basic configuration for logging +logging.basicConfig(level=logging.INFO, format="%(levelname)s: %(message)s") + + +def process_changelog(file_path, release_pr_number): + # Attempt to open and read the file content + try: + with open(file_path) as file: # Default mode is 'r' for read + lines = file.readlines() + except OSError as e: # Catching file I/O errors + logging.error(f"Failed to open or read file: {e}") + return + + pr_occurrences = {} # Dictionary to track occurrences of PR numbers + + # Iterate through each line to find PR numbers + for i, line in enumerate(lines): + match = re.search(r"\(#(\d+)\)", line) # Regex to find PR numbers + if match: + pr_number = int(match.group(1)) + # Add line index to the list of occurrences for the PR number + if pr_number not in pr_occurrences: + pr_occurrences[pr_number] = [] + pr_occurrences[pr_number].append(i) + + # Set of indices to remove: includes all but last occurrence of each PR number + to_remove = { + i + for pr, indices in pr_occurrences.items() + if len(indices) > 1 + for i in indices[:-1] + } + # Also remove any PR entries less than or equal to the specified release PR number + to_remove.update( + i + for pr, indices in pr_occurrences.items() + for i in indices + if pr <= release_pr_number + ) + + # Filter out lines marked for removal + processed_lines = [line for i, line in enumerate(lines) if i not in to_remove] + + # Final sweep: Ensure no missed duplicates, keeping only the last occurrence + final_lines = [] + seen_pr_numbers = set() # Track seen PR numbers to identify duplicates + for line in reversed( + processed_lines + ): # Start from the end to keep the last occurrence + match = re.search(r"\(#(\d+)\)", line) + if match: + pr_number = int(match.group(1)) + if pr_number in seen_pr_numbers: + continue # Skip duplicate entries + seen_pr_numbers.add(pr_number) + final_lines.append(line) + final_lines.reverse() # Restore original order + + # Write the processed lines back to the file + try: + with open(file_path, "w") as file: + file.writelines(final_lines) + except OSError as e: # Handling potential write errors + logging.error(f"Failed to write to file: {e}") + + +if __name__ == "__main__": + # Ensure correct command line arguments + if len(sys.argv) < 3: + logging.error( + "Usage: python process_changelog.py <changelog_file> <release_pr_number>" + ) + sys.exit(1) + + file_path = sys.argv[1] + release_pr_number = int(sys.argv[2]) + process_changelog(file_path, release_pr_number) |