From 786bc268ac7170cc8767e4bfcd97b6654997358e Mon Sep 17 00:00:00 2001 From: destruc7i0n Date: Fri, 7 Aug 2026 17:44:21 +0000 Subject: [PATCH] simplify docs update script --- .github/workflows/update.yml | 15 +++++++------ scripts/constants.py | 9 ++++---- scripts/update.py | 32 ++++++++++++++-------------- scripts/util.py | 4 +++- scripts/{releases.py => versions.py} | 4 ++-- 5 files changed, 35 insertions(+), 29 deletions(-) rename scripts/{releases.py => versions.py} (82%) diff --git a/.github/workflows/update.yml b/.github/workflows/update.yml index 0a0799a..f46eebd 100644 --- a/.github/workflows/update.yml +++ b/.github/workflows/update.yml @@ -14,6 +14,9 @@ concurrency: group: ${{ github.workflow }} cancel-in-progress: false +permissions: + contents: write + jobs: check: if: github.repository == 'bedrock-dot-dev/docs' && (github.ref == 'refs/heads/master' || github.event_name == 'workflow_dispatch') @@ -57,15 +60,15 @@ jobs: - name: Setup git environment ⚙️ if: github.ref == 'refs/heads/master' run: | - git config --global user.name 'destruc7i0n' - git config --global user.email 'destruc7i0n@users.noreply.github.com' + git config user.name 'destruc7i0n' + git config user.email 'destruc7i0n@users.noreply.github.com' - name: Check for docs update 🔎 id: check env: DRY_RUN: ${{ github.ref != 'refs/heads/master' }} + working-directory: scripts run: | - cd scripts python3 update.py - name: Update summary 📝 @@ -73,7 +76,7 @@ jobs: echo "### Check output 🗒️" >> $GITHUB_STEP_SUMMARY echo "Dry run: ${{ github.ref != 'refs/heads/master' }}" >> $GITHUB_STEP_SUMMARY echo "Update found: ${{ (steps.check.outputs.update == 'true' && '✅') || '❌' }}" >> $GITHUB_STEP_SUMMARY - echo 'JSON output: `${{ steps.check.outputs.release_data }}`' >> $GITHUB_STEP_SUMMARY + echo 'JSON output: `${{ steps.check.outputs.version_data }}`' >> $GITHUB_STEP_SUMMARY if [ "${{ steps.check.outputs.update }}" == "true" ]; then echo 'Commit message: ${{ steps.check.outputs.msg }}' >> $GITHUB_STEP_SUMMARY fi @@ -94,7 +97,7 @@ jobs: ], "username": "bedrock.dev", "avatar_url": "https://bedrock.dev/favicon/android-chrome-512x512.png", - }' | curl -X POST -H "Content-Type: application/json" -d @- $DISCORD_WEBHOOK + }' | curl --fail-with-body --silent --show-error -X POST -H "Content-Type: application/json" -d @- "$DISCORD_WEBHOOK" - name: Archive documentation files 📁 if: steps.check.outputs.update == 'true' @@ -110,4 +113,4 @@ jobs: run: | # sleep for a bit for GitHub's cache sleep 10s - curl -X POST $VERCEL_DEPLOY_HOOK + curl --fail-with-body --silent --show-error -X POST "$VERCEL_DEPLOY_HOOK" diff --git a/scripts/constants.py b/scripts/constants.py index e2d6209..c9cb13a 100644 --- a/scripts/constants.py +++ b/scripts/constants.py @@ -4,12 +4,13 @@ LINE = '-' * 20 -ROOT = Path('../') -TAGS_PATH = Path('../tags.json') +SCRIPTS_PATH = Path(__file__).resolve().parent +ROOT = SCRIPTS_PATH.parent +TAGS_PATH = ROOT / 'tags.json' -CACHE_PATH = Path('./cache') +CACHE_PATH = SCRIPTS_PATH / 'cache' -TMP_PATH = Path('./tmp') +TMP_PATH = SCRIPTS_PATH / 'tmp' IS_ACTIONS = 'GITHUB_ACTIONS' in os.environ DRY_RUN = os.environ.get('DRY_RUN') == 'true' diff --git a/scripts/update.py b/scripts/update.py index 7330a33..18d588c 100644 --- a/scripts/update.py +++ b/scripts/update.py @@ -1,6 +1,6 @@ -import json, shutil, subprocess, shlex +import json, shutil, subprocess -from releases import get_latest_releases +from versions import get_latest_versions from util import MinecraftVersion, write_to_github_output, ensure_required_paths from docs import get_docs_update @@ -44,8 +44,8 @@ def do_versioned_commits(updates: list[tuple[MinecraftVersion, MinecraftVersion] print(f'Committing "{copy_previous_version_msg}"') # add previous files commit - subprocess.run(shlex.split('git add --all'), cwd=Constants.ROOT) - subprocess.run(shlex.split(f'git commit -m \'{copy_previous_version_msg}\''), cwd=Constants.ROOT) + subprocess.run(['git', 'add', '--all'], cwd=Constants.ROOT, check=True) + subprocess.run(['git', 'commit', '-m', copy_previous_version_msg], cwd=Constants.ROOT, check=True) # remove the new version directories to handle deleted files for prev, new in updates: @@ -60,32 +60,32 @@ def do_versioned_commits(updates: list[tuple[MinecraftVersion, MinecraftVersion] final_msg = f'Docs update: {msg}' print(f'Committing "{final_msg}"') - subprocess.run(shlex.split('git add --all'), cwd=Constants.ROOT) - subprocess.run(shlex.split(f'git commit -m \'{final_msg}\''), cwd=Constants.ROOT) + subprocess.run(['git', 'add', '--all'], cwd=Constants.ROOT, check=True) + subprocess.run(['git', 'commit', '-m', final_msg], cwd=Constants.ROOT, check=True) - subprocess.run(shlex.split('git push'), cwd=Constants.ROOT) + subprocess.run(['git', 'push'], cwd=Constants.ROOT, check=True) def main() -> None: ensure_required_paths() - latest_releases = get_latest_releases() + latest_versions = get_latest_versions() tags = json.loads(Constants.TAGS_PATH.read_text()) - # mapping of version tag to current and latest release - release_data: dict[Tags, dict[str, str]] = {} + # mapping of version tag to current and latest version + version_data: dict[str, dict[str, str]] = {} for tag in Tags: - latest_version_id = latest_releases[tag.value] + latest_version_id = latest_versions[tag.value] current_version_id = tags[tag.value][1] - release_data[tag.value] = { + version_data[tag.value] = { 'current': current_version_id, 'latest': latest_version_id, } - print('Release data:', json.dumps(release_data, indent=2)) + print('Version data:', json.dumps(version_data, indent=2)) print(Constants.LINE) # write as a github actions output - write_to_github_output('release_data', json.dumps(release_data)) + write_to_github_output('version_data', json.dumps(version_data)) commit_msg_parts = [] version_updates = [] @@ -97,8 +97,8 @@ def check_update(tag: Tags) -> bool: :return: True if there is an update, False otherwise """ - current_version = MinecraftVersion(release_data[tag.value]['current']) - latest_version = MinecraftVersion(release_data[tag.value]['latest']) + current_version = MinecraftVersion(version_data[tag.value]['current']) + latest_version = MinecraftVersion(version_data[tag.value]['latest']) if latest_version > current_version: print(f'New {tag.name} version found: {latest_version}') diff --git a/scripts/util.py b/scripts/util.py index 54ec50e..e3cf85c 100644 --- a/scripts/util.py +++ b/scripts/util.py @@ -1,4 +1,4 @@ -import os +import os, shutil from pathlib import Path import constants as Constants @@ -71,6 +71,8 @@ def ensure_required_paths() -> None: """ Ensures that the required paths exist """ + if Constants.TMP_PATH.exists(): + shutil.rmtree(Constants.TMP_PATH) Constants.TMP_PATH.mkdir(exist_ok=True, parents=True) Constants.CACHE_PATH.mkdir(exist_ok=True, parents=True) diff --git a/scripts/releases.py b/scripts/versions.py similarity index 82% rename from scripts/releases.py rename to scripts/versions.py index fe2e7b6..322dff4 100644 --- a/scripts/releases.py +++ b/scripts/versions.py @@ -3,9 +3,9 @@ import constants as Constants from constants import Tags -def get_latest_releases() -> dict[str, str]: +def get_latest_versions() -> dict[str, str]: """ - Gets the latest releases from the checked out version files + Gets the latest versions from the checked out version files :return: A dict with the latest preview and stable versions """ stable_version_map = json.loads((Constants.SOURCES[Tags.STABLE.value] / 'version.json').read_text())