diff --git a/.github/workflows/alpha.yml b/.github/workflows/alpha.yml index 3f2b9616..a1fe19aa 100644 --- a/.github/workflows/alpha.yml +++ b/.github/workflows/alpha.yml @@ -179,21 +179,14 @@ jobs: token: ${{ secrets.CROSS_REPO_PUSH_KEY }} path: "SideStore/apps-v2.json" - # -------------------------------------------------- - # deploy - # -------------------------------------------------- - - name: Deploy - if: env.DEPLOY_KEY != '' + - name: Generate Metadata run: | python3 scripts/ci/workflow.py dump-project-settings PRODUCT_NAME=$(python3 scripts/ci/workflow.py read-product-name) BUNDLE_ID=$(python3 scripts/ci/workflow.py read-bundle-id) - SOURCE_JSON="_includes/source.json" IPA_NAME="$PRODUCT_NAME.ipa" - - python3 scripts/ci/workflow.py deploy \ - SideStore/apps-v2.json \ - "$SOURCE_JSON" \ + + python3 scripts/ci/workflow.py generate-metadata \ "$CHANNEL" \ "$SHORT_COMMIT" \ "$MARKETING_VERSION" \ @@ -202,8 +195,20 @@ jobs: "$IPA_NAME" \ "$LAST_SUCCESSFUL_COMMIT" + - name: Deploy + if: env.DEPLOY_KEY != '' + run: | + SOURCE_JSON="_includes/source.json" + + python3 scripts/ci/workflow.py deploy \ + SideStore/apps-v2.json \ + "$SOURCE_JSON" \ + "$CHANNEL" \ + "$MARKETING_VERSION" + + # -------------------------------------------------- - # upload release + # upload release to GH # -------------------------------------------------- - name: Upload Release run: | diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 390c33c8..5f0c0438 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -217,21 +217,15 @@ jobs: token: ${{ secrets.CROSS_REPO_PUSH_KEY }} path: "SideStore/apps-v2.json" - # -------------------------------------------------- - # deploy - # -------------------------------------------------- - - name: Deploy - if: steps.build_gate.outputs.should_skip != 'true' && env.DEPLOY_KEY != '' + - name: Generate Metadata + if: steps.build_gate.outputs.should_skip != 'true' run: | python3 scripts/ci/workflow.py dump-project-settings PRODUCT_NAME=$(python3 scripts/ci/workflow.py read-product-name) BUNDLE_ID=$(python3 scripts/ci/workflow.py read-bundle-id) - SOURCE_JSON="_includes/source.json" IPA_NAME="$PRODUCT_NAME.ipa" - - python3 scripts/ci/workflow.py deploy \ - SideStore/apps-v2.json \ - "$SOURCE_JSON" \ + + python3 scripts/ci/workflow.py generate-metadata \ "$CHANNEL" \ "$SHORT_COMMIT" \ "$MARKETING_VERSION" \ @@ -240,8 +234,20 @@ jobs: "$IPA_NAME" \ "$LAST_SUCCESSFUL_COMMIT" + - name: Deploy + if: steps.build_gate.outputs.should_skip != 'true' && env.DEPLOY_KEY != '' + run: | + SOURCE_JSON="_includes/source.json" + + python3 scripts/ci/workflow.py deploy \ + SideStore/apps-v2.json \ + "$SOURCE_JSON" \ + "$CHANNEL" \ + "$MARKETING_VERSION" + + # -------------------------------------------------- - # upload release + # upload release to GH # -------------------------------------------------- - name: Upload Release if: steps.build_gate.outputs.should_skip != 'true' diff --git a/.github/workflows/stable.yml b/.github/workflows/stable.yml index dc2de2ad..2f6d486f 100644 --- a/.github/workflows/stable.yml +++ b/.github/workflows/stable.yml @@ -16,6 +16,7 @@ jobs: runs-on: macos-26 env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} RELEASE_NAME: Stable CHANNEL: stable UPSTREAM_CHANNEL: "" @@ -103,6 +104,22 @@ jobs: name: SideStore-${{ env.MARKETING_VERSION }}-dSYMs.zip path: SideStore.dSYMs.zip + - name: Generate Metadata + run: | + python3 scripts/ci/workflow.py dump-project-settings + PRODUCT_NAME=$(python3 scripts/ci/workflow.py read-product-name) + BUNDLE_ID=$(python3 scripts/ci/workflow.py read-bundle-id) + IPA_NAME="$PRODUCT_NAME.ipa" + + python3 scripts/ci/workflow.py generate-metadata \ + "$CHANNEL" \ + "$SHORT_COMMIT" \ + "$MARKETING_VERSION" \ + "$CHANNEL" \ + "$BUNDLE_ID" \ + "$IPA_NAME" \ + "$LAST_SUCCESSFUL_COMMIT" + - name: Upload to releases env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/scripts/ci/workflow.py b/scripts/ci/workflow.py index d45e3ec1..835a2cdf 100644 --- a/scripts/ci/workflow.py +++ b/scripts/ci/workflow.py @@ -246,22 +246,13 @@ def retrieve_release_notes(tag): # ---------------------------------------------------------- # DEPLOY SOURCE.JSON # ---------------------------------------------------------- - -def deploy(repo, source_json, release_tag, short_commit, marketing_version, channel, bundle_id, ipa_name, last_successful_commit=None): - repo = (ROOT / repo).resolve() +def generate_metadata(release_tag, short_commit, marketing_version, channel, bundle_id, ipa_name, last_successful_commit=None): ipa_path = ROOT / ipa_name - source_json_path = repo / source_json metadata = 'source-metadata.json' - if not repo.exists(): - raise SystemExit(f"{repo} repo missing") - if not ipa_path.exists(): raise SystemExit(f"{ipa_path} missing") - if not source_json_path.exists(): - raise SystemExit(f"{source_json} missing inside repo") - cmd = ( f"python3 {SCRIPTS}/generate_source_metadata.py " f"--repo-root {ROOT} " @@ -276,12 +267,26 @@ def deploy(repo, source_json, release_tag, short_commit, marketing_version, chan f"--bundle-id {bundle_id}" ) - # pass only if provided if last_successful_commit: cmd += f" --last-successful-commit {last_successful_commit}" run(cmd) +def deploy(repo, source_json, release_tag, marketing_version): + repo = (ROOT / repo).resolve() + source_json_path = repo / source_json + metadata = 'source-metadata.json' + + if not repo.exists(): + raise SystemExit(f"{repo} repo missing") + + if not (repo / ".git").exists(): + print("Repo is not a git repository, skipping deploy", file=sys.stderr) + return + + if not source_json_path.exists(): + raise SystemExit(f"{source_json} missing inside repo") + run("git config user.name 'GitHub Actions'", check=False) run("git config user.email 'github-actions@github.com'", check=False) @@ -290,7 +295,7 @@ def deploy(repo, source_json, release_tag, short_commit, marketing_version, chan run("git switch main || git switch -c main origin/main", cwd=repo) run("git reset --hard origin/main", cwd=repo) # ------------------------------------------------------ - + max_attempts = 5 for attempt in range(1, max_attempts + 1): if attempt > 1: @@ -313,6 +318,7 @@ def deploy(repo, source_json, release_tag, short_commit, marketing_version, chan else: raise SystemExit("Deploy push failed after retries") + def last_successful_commit(workflow, branch): import json @@ -492,13 +498,15 @@ COMMANDS = { # ---------------------------------------------------------- # RELEASE / DEPLOY # ---------------------------------------------------------- - "last-successful-commit" : (last_successful_commit, 2, " "), - "release-notes" : (release_notes, 1, ""), - "retrieve-release-notes" : (retrieve_release_notes, 1, ""), - "deploy" : (deploy, 9, - " [last_successful_commit]"), - "upload-release" : (upload_release, 5, " [is_stable]"), -} + "last-successful-commit" : (last_successful_commit, 2, " "), + "release-notes" : (release_notes, 1, ""), + "retrieve-release-notes" : (retrieve_release_notes, 1, ""), + "generate-metadata" : (generate_metadata, 7, + " [last_successful_commit]"), + "deploy" : (deploy, 4, + " "), + "upload-release" : (upload_release, 5, + " [is_stable]"),} def main(): def usage():