CI: multiple fixes

This commit is contained in:
mahee96
2026-02-25 07:33:55 +05:30
parent 555bb3d985
commit 118f64de8a
6 changed files with 59 additions and 39 deletions

View File

@@ -28,7 +28,7 @@ jobs:
- name: Find Last Successful commit - name: Find Last Successful commit
run: | run: |
LAST_SUCCESSFUL_COMMIT=$(python3 scripts/ci/workflow.py last-successful-commit \ LAST_SUCCESSFUL_COMMIT=$(python3 scripts/ci/workflow.py last-successful-commit \
"${{ github.workflow }}" "${{ env.CHANNEL }}" || echo "") "false" "${{ env.CHANNEL }}" || echo "")
echo "LAST_SUCCESSFUL_COMMIT=$LAST_SUCCESSFUL_COMMIT" | tee -a $GITHUB_ENV echo "LAST_SUCCESSFUL_COMMIT=$LAST_SUCCESSFUL_COMMIT" | tee -a $GITHUB_ENV
- run: brew install ldid xcbeautify - run: brew install ldid xcbeautify

View File

@@ -30,7 +30,7 @@ jobs:
- name: Find Last Successful commit - name: Find Last Successful commit
run: | run: |
LAST_SUCCESSFUL_COMMIT=$(python3 scripts/ci/workflow.py last-successful-commit \ LAST_SUCCESSFUL_COMMIT=$(python3 scripts/ci/workflow.py last-successful-commit \
"${{ github.workflow }}" "${{ env.CHANNEL }}" || echo "") "false" "${{ env.CHANNEL }}" || echo "")
echo "LAST_SUCCESSFUL_COMMIT=$LAST_SUCCESSFUL_COMMIT" | tee -a $GITHUB_ENV echo "LAST_SUCCESSFUL_COMMIT=$LAST_SUCCESSFUL_COMMIT" | tee -a $GITHUB_ENV
- name: Check for new changes (on schedule) - name: Check for new changes (on schedule)

View File

@@ -17,7 +17,6 @@ jobs:
env: env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
RELEASE_NAME: Stable
CHANNEL: stable CHANNEL: stable
UPSTREAM_CHANNEL: "" UPSTREAM_CHANNEL: ""
@@ -27,6 +26,12 @@ jobs:
submodules: recursive submodules: recursive
fetch-depth: 0 fetch-depth: 0
- name: Find Last Successful commit
run: |
LAST_SUCCESSFUL_COMMIT=$(python3 scripts/ci/workflow.py last-successful-commit \
"true" || echo "")
echo "LAST_SUCCESSFUL_COMMIT=$LAST_SUCCESSFUL_COMMIT" | tee -a $GITHUB_ENV
- run: brew install ldid xcbeautify - run: brew install ldid xcbeautify
- name: Setup Env - name: Setup Env
@@ -68,9 +73,6 @@ jobs:
~/Library/Caches/org.swift.swiftpm ~/Library/Caches/org.swift.swiftpm
key: xcode-build-cache-stable- key: xcode-build-cache-stable-
- name: Clean
run: python3 scripts/ci/workflow.py clean
- name: Build - name: Build
id: build id: build
env: env:
@@ -112,7 +114,7 @@ jobs:
IPA_NAME="$PRODUCT_NAME.ipa" IPA_NAME="$PRODUCT_NAME.ipa"
python3 scripts/ci/workflow.py generate-metadata \ python3 scripts/ci/workflow.py generate-metadata \
"$CHANNEL" \ "${{ github.ref_name }}" \
"$SHORT_COMMIT" \ "$SHORT_COMMIT" \
"$MARKETING_VERSION" \ "$MARKETING_VERSION" \
"$CHANNEL" \ "$CHANNEL" \
@@ -125,7 +127,7 @@ jobs:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: | run: |
python3 scripts/ci/workflow.py upload-release \ python3 scripts/ci/workflow.py upload-release \
"$RELEASE_NAME" \ "${{ github.ref_name }}" \
"${{ github.ref_name }}" \ "${{ github.ref_name }}" \
"$GITHUB_SHA" \ "$GITHUB_SHA" \
"$GITHUB_REPOSITORY" \ "$GITHUB_REPOSITORY" \

View File

@@ -137,12 +137,20 @@ def generate_release_notes(last_successful, tag, branch):
url = repo_url() url = repo_url()
section += ( section += (
f"\n{HEADER_MARKER} Full Changelog: " f"\n{HEADER_MARKER} Full Changelog: "
f"[{last_successful[:8]}...{current[:8]}]" f"[{ref_display(last_successful)}...{ref_display(current)}]"
f"({url}/compare/{last_successful}...{current})\n" f"({url}/compare/{last_successful}...{current})\n"
) )
return section return section
def ref_display(ref):
try:
tag = run(f'git describe --tags --exact-match "{ref}" 2>/dev/null || true')
if tag:
return tag
except Exception:
pass
return ref[:8]
# ---------------------------------------------------------- # ----------------------------------------------------------
# markdown update # markdown update
@@ -276,4 +284,4 @@ def main():
if __name__ == "__main__": if __name__ == "__main__":
main() main()

View File

@@ -107,13 +107,13 @@ def main():
gen_cmd = ( gen_cmd = (
f"python3 {script} " f"python3 {script} "
f"{args.last_successful_commit} {args.release_tag} " f"{args.last_successful_commit} {args.release_tag} "
f"--output-dir \"{notes_dir}\"" f'--output-dir "{notes_dir}"'
) )
else: else:
gen_cmd = ( gen_cmd = (
f"python3 {script} " f"python3 {script} "
f"{args.short_commit} {args.release_tag} " f"{args.short_commit} {args.release_tag} "
f"--output-dir \"{notes_dir}\"" f'--output-dir "{notes_dir}"'
) )
sh(gen_cmd, cwd=repo_root) sh(gen_cmd, cwd=repo_root)

View File

@@ -318,21 +318,32 @@ def deploy(repo, source_json, release_tag, marketing_version):
raise SystemExit("Deploy push failed after retries") raise SystemExit("Deploy push failed after retries")
def last_successful_commit(workflow, branch): def last_successful_commit(is_stable, tag=None):
import json is_stable = str(is_stable).lower() in ("1", "true", "yes")
try: try:
out = runAndGet( if is_stable:
f'gh run list ' prev_tag = runAndGet(
f'--workflow "{workflow}" ' r'git tag --sort=-v:refname '
f'--json headSha,conclusion,headBranch' r'| grep -E "^[0-9]+\.[0-9]+\.[0-9]+$" '
) r'| sed -n "2p" || true'
).strip()
runs = json.loads(out) if prev_tag:
return runAndGet(f'git rev-parse "{prev_tag}^{{commit}}"')
for r in runs: return None # ← changed
if r.get("conclusion") == "success" and r.get("headBranch") == branch:
return r["headSha"] if tag:
exists = subprocess.call(
f'git rev-parse -q --verify "refs/tags/{tag}"',
shell=True,
stdout=subprocess.DEVNULL,
stderr=subprocess.DEVNULL,
) == 0
if exists:
return runAndGet(f'git rev-parse "{tag}^{{commit}}"')
except Exception: except Exception:
pass pass
@@ -341,15 +352,13 @@ def last_successful_commit(workflow, branch):
def upload_release(release_name, release_tag, commit_sha, repo, upstream_tag_recommended, is_stable=False): def upload_release(release_name, release_tag, commit_sha, repo, upstream_tag_recommended, is_stable=False):
is_stable = str(is_stable).lower() in ("1", "true", "yes") is_stable = str(is_stable).lower() in ("1", "true", "yes")
draft = False
prerelease = True
latest = False
if is_stable: if is_stable:
draft = True # always create a draft for stable and let user publish release
update_tag = False
prerelease = False prerelease = False
else: latest = True
draft = False
update_tag = True # update existing
prerelease = True
token = getenv("GH_TOKEN") token = getenv("GH_TOKEN")
if token: if token:
@@ -377,12 +386,13 @@ def upload_release(release_name, release_tag, commit_sha, repo, upstream_tag_rec
f"--output-dir {ROOT}" f"--output-dir {ROOT}"
) )
release_notes = re.sub( if is_stable:
r'^\s*#{1,6}\s*what(?:\'?s|\s+is)?\s+(?:new|changed).*', release_notes = re.sub(
"## What's Changed", r'(?im)^[ \t]*#{1,6}[ \t]*what[\']?s[ \t]+changed[ \t]*$',
release_notes, "## What's Changed",
flags=re.IGNORECASE | re.MULTILINE, release_notes,
) flags=re.IGNORECASE | re.MULTILINE,
)
upstream_block = "" upstream_block = ""
if upstream_tag_recommended and upstream_tag_recommended.strip(): if upstream_tag_recommended and upstream_tag_recommended.strip():
@@ -405,7 +415,7 @@ def upload_release(release_name, release_tag, commit_sha, repo, upstream_tag_rec
draft_flag = "--draft" if draft else "" draft_flag = "--draft" if draft else ""
prerelease_flag = "--prerelease" if prerelease else "" prerelease_flag = "--prerelease" if prerelease else ""
latest_flag = "" if update_tag else "--latest=false" latest_flag = "--latest=true" if latest else ""
# create release if it doesn't exist # create release if it doesn't exist
exists = subprocess.call( exists = subprocess.call(
@@ -514,7 +524,7 @@ COMMANDS = {
# ---------------------------------------------------------- # ----------------------------------------------------------
# RELEASE / DEPLOY # RELEASE / DEPLOY
# ---------------------------------------------------------- # ----------------------------------------------------------
"last-successful-commit" : (last_successful_commit, 2, "<workflow_name> <branch>"), "last-successful-commit" : (last_successful_commit, 1, "<is_stable> [tag]"),
"release-notes" : (release_notes, 1, "<tag>"), "release-notes" : (release_notes, 1, "<tag>"),
"retrieve-release-notes" : (retrieve_release_notes, 1, "<tag>"), "retrieve-release-notes" : (retrieve_release_notes, 1, "<tag>"),
"generate-metadata" : (generate_metadata, 7, "generate-metadata" : (generate_metadata, 7,
@@ -548,9 +558,9 @@ def main():
suffix = f" {arg_usage}" if arg_usage else "" suffix = f" {arg_usage}" if arg_usage else ""
raise SystemExit(f"Usage: workflow.py {cmd}{suffix}") raise SystemExit(f"Usage: workflow.py {cmd}{suffix}")
args = sys.argv[2:2 + argc] args = sys.argv[2:]
result = func(*args) if argc else func() result = func(*args) if args else func()
# ONLY real outputs go to stdout # ONLY real outputs go to stdout
if result is not None: if result is not None: