diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 00000000000..36292805d5b --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,5 @@ + + +## About The Pull Request + + diff --git a/tools/GenerateChangelog/How to update the changelogs.txt b/tools/GenerateChangelog/How to update the changelogs.txt deleted file mode 100644 index 51cd9919c45..00000000000 --- a/tools/GenerateChangelog/How to update the changelogs.txt +++ /dev/null @@ -1,15 +0,0 @@ -Taken mostly from https://tgstation13.org/wiki/Guide_to_Changelogs#Updating_the_Changelog with a few changes. - -First, install Python 2.7. Yes, it's outdated, but that's what the script is made to work with. -Make sure that Python 2.7 and its Scripts/ folder is in PATH -Upgrade pip, as outlined here https://pip.pypa.io/en/stable/installing/ -Once pip is installed, you will need to run two commands from your terminal or command prompt to install packages -1. 'pip install PyYaml' -2. 'pip install beautifulsoup4' - -Once all this is done, you should just be able to run ss13_genchangelog.py and sit back. - -If you get errors running it, two things are possible. -1. You installed something wrong. -2. Someone formatted their changelog wrong. -Check where the error was, do a bit of troubleshooting, see if it wasn't #2. Fixing the syntax in the yaml files is pretty simple. \ No newline at end of file diff --git a/tools/GenerateChangelog/makeChangelog.bat b/tools/GenerateChangelog/makeChangelog.bat deleted file mode 100644 index 7ee7bb625da..00000000000 --- a/tools/GenerateChangelog/makeChangelog.bat +++ /dev/null @@ -1,4 +0,0 @@ -@echo off -rem Cheridan asked for this. - N3X -call python ss13_genchangelog.py ../../html/changelog.html ../../html/changelogs -pause diff --git a/tools/GenerateChangelog/ss13_autochangelog.py b/tools/GenerateChangelog/ss13_autochangelog.py deleted file mode 100644 index 844f7050dd7..00000000000 --- a/tools/GenerateChangelog/ss13_autochangelog.py +++ /dev/null @@ -1,121 +0,0 @@ -''' -Usage: - $ python ss13_autochangelog.py [--dry-run] html/changelogs [PR_number] [PR_author] [PR_Body] - -ss13_autochangelog.py - Generate changelog YAML files from pull request. -''' - -from __future__ import print_function -import os, sys, re, time, argparse -from datetime import datetime, date -from time import time - -today = date.today() - -dateformat = "%d %B %Y" - -opt = argparse.ArgumentParser() -opt.add_argument('target_dir', help='The location to write changelog files to.') -opt.add_argument('pr_numb', help='The number of the pull request.') -opt.add_argument('pr_author', help='The author of the pull request. If specific authors aren\'t specified, the PR author will be used') -opt.add_argument('pr_body', help='The body of the pull request to parse for changelogs.') - -args = opt.parse_args() - -all_changelog_entries = {} - -validPrefixes = { - "fix": 'bugfix', - "fixes": 'bugfix', - "bugfix": 'bugfix', - "wip": 'wip', - "tweak": 'tweak', - "tweaks": 'tweak', - "rsctweak": 'tweak', - "soundadd": 'soundadd', - "sounddel": 'sounddel', - "add": 'rscadd', - "adds": 'rscadd', - "rscadd": 'rscadd', - "del": 'rscdel', - "dels": 'rscdel', - "delete": 'rscdel', - "deletes": 'rscdel', - "rscdeldel": 'rscdel', - "imageadd": 'imageadd', - "imagedel": 'imagedel', - "maptweak": 'maptweak', - "remap": 'maptweak', - "remaps": 'maptweak', - "typo": 'spellcheck', - "spellcheck": 'spellcheck', - "experimental": 'experiment', - "experiments": 'experiment', - "experiment": 'experiment' -} - -incltag = False -new_logs = {} -author = args.pr_author -new = 0 - -# Parse PR body for changelog entries -print('Reading changelogs...') -for line in args.pr_body.splitlines(): - print(f"Checking line '{line}'") - if line[:1] == "🆑": # Find the start of the changelog - print("Found opening :cl: tag") - if incltag == True: # If we're already reading logs, skip - continue - incltag = True - - # Fetch the author name - author = line[1:] - author.strip() - - if not len(author): - author = args.pr_author - - if author not in new_logs: - new_logs[author] = [] # Make array entry for the author - continue - - # If we hit a /cl, we're no longer reading logs - elif line == "/🆑": - print("Found closing /:cl: tag") - incltag = False - - # If we aren't reading logs, we don't care about any other line contents - if not incltag: - continue - - # Split line into tag (icon) and body (comment) - body = re.split("[ ,:-]", line, 1) - if len(body) != 2: - continue # If there's just one word, then it can't really be a changelog, now can it - - if body[0] in validPrefixes: - tag = validPrefixes[body[0]] - body = body[1].strip(" ,-:\t\n") - else: # If the tag is invalid, just default to rscadd - tag = "rscadd" - body = line.strip(" ,-:\t\n") - - new_logs[author].append(f" - {tag}: \"{body}\"") - new += 1 - -print(f"Writing {new} new changelog entries.") # f supposedly formats new into the var - -for auth in new_logs: - # Sanitize authors without changes - if not len(new_logs[auth]): - continue - - f = open(os.path.join(args.target_dir, f"{auth}{args.pr_numb}.yml"), 'w') - print(f"Writing changes to {f}") - f.write(f'author: {auth}\n') - f.write('delete-after: True\n') - f.write('changes:\n') - for log in new_logs[auth]: - f.write(f'{log}\n') - f.close() diff --git a/tools/GenerateChangelog/ss13_genchangelog.py b/tools/GenerateChangelog/ss13_genchangelog.py deleted file mode 100644 index e597ac7a6c5..00000000000 --- a/tools/GenerateChangelog/ss13_genchangelog.py +++ /dev/null @@ -1,215 +0,0 @@ -''' -Usage: - $ python ss13_genchangelog.py [--dry-run] html/changelog.html html/changelogs/ - -ss13_genchangelog.py - Generate changelog from YAML. - -Copyright 2013 Rob "N3X15" Nelson - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -''' - -from __future__ import print_function -import yaml, os, glob, sys, re, time, argparse -from datetime import datetime, date -from time import time - -today = date.today() - -dateformat = "%d %B %Y" - -opt = argparse.ArgumentParser() -opt.add_argument('-d', '--dry-run', dest='dryRun', default=False, action='store_true', help='Only parse changelogs and, if needed, the targetFile. (A .dry_changelog.yml will be output for debugging purposes.)') -opt.add_argument('targetFile', help='The HTML changelog we wish to update.') -opt.add_argument('ymlDir', help='The directory of YAML changelogs we will use.') - -args = opt.parse_args() - -all_changelog_entries = {} - -validPrefixes = [ - 'bugfix', - 'wip', - 'tweak', - 'soundadd', - 'sounddel', - 'rscdel', - 'rscadd', - 'imageadd', - 'imagedel', - 'maptweak', - 'spellcheck', - 'experiment' -] - -def dictToTuples(inp): - return [(k, v) for k, v in inp.items()] - -changelog_cache = os.path.join(args.ymlDir, '.all_changelog.yml') - -failed_cache_read = True -if os.path.isfile(changelog_cache): - try: - with open(changelog_cache) as f: - (_, all_changelog_entries) = yaml.load_all(f) - failed_cache_read = False - - # Convert old timestamps to newer format. - new_entries = {} - for _date in all_changelog_entries.keys(): - ty = type(_date).__name__ - # print(ty) - if ty in ['str', 'unicode']: - temp_data = all_changelog_entries[_date] - _date = datetime.strptime(_date, dateformat).date() - new_entries[_date] = temp_data - else: - new_entries[_date] = all_changelog_entries[_date] - all_changelog_entries = new_entries - except Exception as e: - print("Failed to read cache:") - print(e, file=sys.stderr) - -if args.dryRun: - changelog_cache = os.path.join(args.ymlDir, '.dry_changelog.yml') - -if failed_cache_read and os.path.isfile(args.targetFile): - from bs4 import BeautifulSoup - from bs4.element import NavigableString - print(' Generating cache...') - with open(args.targetFile, 'r') as f: - soup = BeautifulSoup(f) - for e in soup.find_all('div', {'class':'commit'}): - entry = {} - date = datetime.strptime(e.h2.string.strip(), dateformat).date() # key - for authorT in e.find_all('h3', {'class':'author'}): - author = authorT.string - # Strip suffix - if author.endswith('updated:'): - author = author[:-8] - author = author.strip() - - # Find