diff --git a/.gitea/scripts/update-appimage-nix.sh b/.gitea/scripts/update-appimage-nix.sh index affc347..72e3752 100644 --- a/.gitea/scripts/update-appimage-nix.sh +++ b/.gitea/scripts/update-appimage-nix.sh @@ -4,7 +4,6 @@ set -euo pipefail : "${FILE:?FILE is required}" : "${LATEST_RELEASE_URL:?LATEST_RELEASE_URL is required}" : "${DOWNLOAD_URL_TEMPLATE:?DOWNLOAD_URL_TEMPLATE is required}" -: "${RELEASE_API_REPO:?RELEASE_API_REPO is required}" if command -v python >/dev/null 2>&1; then PYTHON_BIN=python @@ -60,184 +59,14 @@ s=re.sub(r'hash\s*=\s*"[^"]+"', f'hash = "{os.environ["NEW_HASH"]}"', s, count=1 open(p,"w").write(s) PY -echo "updated=true" >> "$GITHUB_OUTPUT" -echo "version=$latest_version" >> "$GITHUB_OUTPUT" -echo "previous_version=$current_version" >> "$GITHUB_OUTPUT" - release_tag="${release_tag_template//\{version\}/$latest_version}" release_tag="${release_tag#\{}" release_tag="${release_tag%\}}" release_tag="${release_tag#\'}" release_tag="${release_tag%\'}" - release_url="${LATEST_RELEASE_URL%/latest}/tag/${release_tag}" -release_html=$(curl -fsSL "$release_url" || true) -release_notes="" -if [ -n "$release_html" ]; then - release_notes=$(printf '%s' "$release_html" | "$PYTHON_BIN" -c ' -import re -import sys -from html.parser import HTMLParser - -html = sys.stdin.read() - -m = re.search(r"]*data-test-selector=\"body-content\"[^>]*class=\"[^\"]*markdown-body[^\"]*\"[^>]*>(.*?)", html, re.S) -if not m: - print("") - raise SystemExit(0) - -fragment = m.group(1) - -class MdExtractor(HTMLParser): - def __init__(self): - super().__init__() - self.out = [] - self.list_depth = 0 - self.in_pre = False - self.in_code_inline = False - self.link_stack = [] - - def _append(self, text): - self.out.append(text) - - def _ensure_newline(self): - if not self.out: - return - if not self.out[-1].endswith("\n"): - self.out.append("\n") - - def _ensure_blank_line(self): - if not self.out: - return - joined = "".join(self.out) - if joined.endswith("\n\n"): - return - if joined.endswith("\n"): - self.out.append("\n") - else: - self.out.append("\n\n") - - def handle_starttag(self, tag, attrs): - attrs_d = dict(attrs) - - if tag in ("h1", "h2", "h3", "h4", "h5", "h6"): - self._ensure_blank_line() - level = int(tag[1]) - self._append("#" * level + " ") - return - - if tag in ("p", "div"): - self._ensure_blank_line() - return - - if tag in ("ul", "ol"): - self._ensure_blank_line() - self.list_depth += 1 - return - - if tag == "li": - self._ensure_newline() - indent = " " * max(self.list_depth - 1, 0) - self._append(f"{indent}- ") - return - - if tag == "br": - self._append("\n") - return - - if tag == "pre": - self._ensure_blank_line() - self._append("```\n") - self.in_pre = True - return - - if tag == "code": - if not self.in_pre: - self._append("`") - self.in_code_inline = True - return - - if tag == "a": - href = attrs_d.get("href", "") - self.link_stack.append(href) - self._append("[") - return - - if tag in ("strong", "b"): - self._append("**") - return - - if tag in ("em", "i"): - self._append("*") - return - - def handle_endtag(self, tag): - if tag in ("h1", "h2", "h3", "h4", "h5", "h6", "p", "div"): - self._ensure_blank_line() - return - - if tag in ("ul", "ol"): - self.list_depth = max(self.list_depth - 1, 0) - self._ensure_blank_line() - return - - if tag == "li": - self._ensure_newline() - return - - if tag == "pre": - self._ensure_newline() - self._append("```\n\n") - self.in_pre = False - return - - if tag == "code": - if not self.in_pre and self.in_code_inline: - self._append("`") - self.in_code_inline = False - return - - if tag == "a": - href = self.link_stack.pop() if self.link_stack else "" - if href: - self._append("](" - + href - + ")") - else: - self._append("]") - return - - if tag in ("strong", "b"): - self._append("**") - return - - if tag in ("em", "i"): - self._append("*") - return - - def handle_data(self, data): - if data: - self._append(data) - -parser = MdExtractor() -parser.feed(fragment) -text = "".join(parser.out) -text = re.sub(r"\n{3,}", "\n\n", text) -text = re.sub(r"[ \t]+\n", "\n", text) -print(text.strip()) -' || true) -else - echo "warning: failed to fetch release page ${release_url}" -fi - -if [ -z "$release_notes" ]; then - release_notes="_No changelog found on upstream release page. Check ${release_url}._" -fi - -delimiter="CHANGELOG_$(date +%s%N)" -{ - echo "changelog<<${delimiter}" - printf '%s\n' "$release_notes" - echo "${delimiter}" -} >> "$GITHUB_OUTPUT" +echo "updated=true" >> "$GITHUB_OUTPUT" +echo "version=$latest_version" >> "$GITHUB_OUTPUT" +echo "previous_version=$current_version" >> "$GITHUB_OUTPUT" +echo "release_url=$release_url" >> "$GITHUB_OUTPUT" diff --git a/.gitea/workflows/handy-update.yml b/.gitea/workflows/handy-update.yml index 13053f2..cad891a 100644 --- a/.gitea/workflows/handy-update.yml +++ b/.gitea/workflows/handy-update.yml @@ -25,9 +25,7 @@ jobs: FILE: modules/pkgs/handy.nix LATEST_RELEASE_URL: https://github.com/cjpais/Handy/releases/latest DOWNLOAD_URL_TEMPLATE: https://github.com/cjpais/Handy/releases/download/v{version}/Handy_{version}_amd64.AppImage - RELEASE_API_REPO: cjpais/Handy RELEASE_TAG_TEMPLATE: v{version} - GITHUB_TOKEN: ${{ secrets.github_token || secrets.GITHUB_TOKEN }} shell: bash run: bash .gitea/scripts/update-appimage-nix.sh @@ -47,14 +45,13 @@ jobs: if: steps.update.outputs.updated == 'true' env: GITEA_TOKEN: ${{ secrets.tea_token || secrets.TEA_TOKEN }} - CHANGELOG: ${{ steps.update.outputs.changelog }} shell: bash run: | set -euo pipefail version="${{ steps.update.outputs.version }}" previous_version="${{ steps.update.outputs.previous_version }}" - release_url="https://github.com/cjpais/Handy/releases/tag/v${version}" + release_url="${{ steps.update.outputs.release_url }}" pr_body=$(cat <