New publish workflow for Robust.Cdn (#32222)
This uses multiple API requests to directly send the publish to the CDN server, no more GitHub artifacts. Faster, less moving parts. Needs Robust.Cdn 2.2.0
This commit is contained in:
committed by
GitHub
parent
a1237910c5
commit
8322b1c2d1
18
.github/workflows/publish.yml
vendored
18
.github/workflows/publish.yml
vendored
@@ -41,21 +41,10 @@ jobs:
|
|||||||
- name: Package client
|
- name: Package client
|
||||||
run: dotnet run --project Content.Packaging client --no-wipe-release
|
run: dotnet run --project Content.Packaging client --no-wipe-release
|
||||||
|
|
||||||
- name: Upload build artifact
|
|
||||||
id: artifact-upload-step
|
|
||||||
uses: actions/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
name: build
|
|
||||||
path: release/*.zip
|
|
||||||
compression-level: 0
|
|
||||||
retention-days: 0
|
|
||||||
|
|
||||||
- name: Publish version
|
- name: Publish version
|
||||||
run: Tools/publish_github_artifact.py
|
run: Tools/publish_multi_request.py
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
PUBLISH_TOKEN: ${{ secrets.PUBLISH_TOKEN }}
|
PUBLISH_TOKEN: ${{ secrets.PUBLISH_TOKEN }}
|
||||||
ARTIFACT_ID: ${{ steps.artifact-upload-step.outputs.artifact-id }}
|
|
||||||
GITHUB_REPOSITORY: ${{ vars.GITHUB_REPOSITORY }}
|
GITHUB_REPOSITORY: ${{ vars.GITHUB_REPOSITORY }}
|
||||||
|
|
||||||
- name: Publish changelog (Discord)
|
- name: Publish changelog (Discord)
|
||||||
@@ -68,8 +57,3 @@ jobs:
|
|||||||
run: Tools/actions_changelog_rss.py
|
run: Tools/actions_changelog_rss.py
|
||||||
env:
|
env:
|
||||||
CHANGELOG_RSS_KEY: ${{ secrets.CHANGELOG_RSS_KEY }}
|
CHANGELOG_RSS_KEY: ${{ secrets.CHANGELOG_RSS_KEY }}
|
||||||
|
|
||||||
- uses: geekyeggo/delete-artifact@v5
|
|
||||||
if: always()
|
|
||||||
with:
|
|
||||||
name: build
|
|
||||||
|
|||||||
78
Tools/publish_multi_request.py
Normal file
78
Tools/publish_multi_request.py
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import requests
|
||||||
|
import os
|
||||||
|
import subprocess
|
||||||
|
from typing import Iterable
|
||||||
|
|
||||||
|
PUBLISH_TOKEN = os.environ["PUBLISH_TOKEN"]
|
||||||
|
VERSION = os.environ["GITHUB_SHA"]
|
||||||
|
|
||||||
|
RELEASE_DIR = "release"
|
||||||
|
|
||||||
|
#
|
||||||
|
# CONFIGURATION PARAMETERS
|
||||||
|
# Forks should change these to publish to their own infrastructure.
|
||||||
|
#
|
||||||
|
ROBUST_CDN_URL = "https://wizards.cdn.spacestation14.com/"
|
||||||
|
FORK_ID = "wizards"
|
||||||
|
|
||||||
|
def main():
|
||||||
|
session = requests.Session()
|
||||||
|
session.headers = {
|
||||||
|
"Authorization": f"Bearer {PUBLISH_TOKEN}",
|
||||||
|
}
|
||||||
|
|
||||||
|
print(f"Starting publish on Robust.Cdn for version {VERSION}")
|
||||||
|
|
||||||
|
data = {
|
||||||
|
"version": VERSION,
|
||||||
|
"engineVersion": get_engine_version(),
|
||||||
|
}
|
||||||
|
headers = {
|
||||||
|
"Content-Type": "application/json"
|
||||||
|
}
|
||||||
|
resp = session.post(f"{ROBUST_CDN_URL}fork/{FORK_ID}/publish/start", json=data, headers=headers)
|
||||||
|
resp.raise_for_status()
|
||||||
|
print("Publish successfully started, adding files...")
|
||||||
|
|
||||||
|
for file in get_files_to_publish():
|
||||||
|
print(f"Publishing {file}")
|
||||||
|
with open(file, "rb") as f:
|
||||||
|
headers = {
|
||||||
|
"Content-Type": "application/octet-stream",
|
||||||
|
"Robust-Cdn-Publish-File": os.path.basename(file),
|
||||||
|
"Robust-Cdn-Publish-Version": VERSION
|
||||||
|
}
|
||||||
|
resp = session.post(f"{ROBUST_CDN_URL}fork/{FORK_ID}/publish/file", data=f, headers=headers)
|
||||||
|
|
||||||
|
resp.raise_for_status()
|
||||||
|
|
||||||
|
print("Successfully pushed files, finishing publish...")
|
||||||
|
|
||||||
|
data = {
|
||||||
|
"version": VERSION
|
||||||
|
}
|
||||||
|
headers = {
|
||||||
|
"Content-Type": "application/json"
|
||||||
|
}
|
||||||
|
resp = session.post(f"{ROBUST_CDN_URL}fork/{FORK_ID}/publish/finish", json=data, headers=headers)
|
||||||
|
resp.raise_for_status()
|
||||||
|
|
||||||
|
print("SUCCESS!")
|
||||||
|
|
||||||
|
|
||||||
|
def get_files_to_publish() -> Iterable[str]:
|
||||||
|
for file in os.listdir(RELEASE_DIR):
|
||||||
|
yield os.path.join(RELEASE_DIR, file)
|
||||||
|
|
||||||
|
|
||||||
|
def get_engine_version() -> str:
|
||||||
|
proc = subprocess.run(["git", "describe","--tags", "--abbrev=0"], stdout=subprocess.PIPE, cwd="RobustToolbox", check=True, encoding="UTF-8")
|
||||||
|
tag = proc.stdout.strip()
|
||||||
|
assert tag.startswith("v")
|
||||||
|
return tag[1:] # Cut off v prefix.
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
||||||
Reference in New Issue
Block a user