]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
add test units
authorMaxSMokeSkaarj <vnazarov@smokeofanarchy.ru>
Thu, 22 May 2025 12:49:20 +0000 (22:49 +1000)
committerMaxSMokeSkaarj <vnazarov@smokeofanarchy.ru>
Thu, 22 May 2025 12:49:20 +0000 (22:49 +1000)
.github/workflows/publish-test.yml [new file with mode: 0644]
Tools/publish_multi_request-test.py [new file with mode: 0755]

diff --git a/.github/workflows/publish-test.yml b/.github/workflows/publish-test.yml
new file mode 100644 (file)
index 0000000..7cbeec5
--- /dev/null
@@ -0,0 +1,59 @@
+name: Publish
+
+concurrency:
+  group: publish
+  cancel-in-progress: true
+
+on: [push]
+
+jobs:
+  build:
+    runs-on: ubuntu-latest
+
+    steps:
+    - name: Install dependencies
+      run: sudo apt-get install -y python3-paramiko python3-lxml
+
+    - uses: actions/checkout@v4.2.2
+      with:
+        submodules: 'recursive'
+    - name: Setup .NET Core
+      uses: actions/setup-dotnet@v4.1.0
+      with:
+        dotnet-version: 9.0.x
+
+    - name: Get Engine Tag
+      run: |
+        cd RobustToolbox
+        git fetch --depth=1
+
+    - name: Install dependencies
+      run: dotnet restore
+
+    - name: Build Packaging
+      run: dotnet build Content.Packaging --configuration Release --no-restore /m
+
+    - name: Package server
+      run: dotnet run --project Content.Packaging server --platform win-x64 --platform linux-x64 --platform osx-x64 --platform linux-arm64
+
+    - name: Package client
+      run: dotnet run --project Content.Packaging client --no-wipe-release
+
+    - name: Publish version
+      run: Tools/publish_multi_request-test.py
+      env:
+        PUBLISH_TOKEN: ${{ secrets.PUBLISH_TOKEN }}
+        GITHUB_REPOSITORY: ${{ vars.GITHUB_REPOSITORY }}
+
+    - name: Publish changelog (Discord)
+      continue-on-error: true
+      run: Tools/actions_changelogs_since_last_run.py
+      env:
+        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+        DISCORD_WEBHOOK_URL: ${{ secrets.CHANGELOG_DISCORD_WEBHOOK }}
+
+    - name: Publish changelog (RSS)
+      continue-on-error: true
+      run: Tools/actions_changelog_rss.py
+      env:
+        CHANGELOG_RSS_KEY: ${{ secrets.CHANGELOG_RSS_KEY }}
diff --git a/Tools/publish_multi_request-test.py b/Tools/publish_multi_request-test.py
new file mode 100755 (executable)
index 0000000..665b8ba
--- /dev/null
@@ -0,0 +1,85 @@
+#!/usr/bin/env python3
+
+import argparse
+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://ss14.smokeofanarchy.ru/cdn/"
+FORK_ID = "test"
+
+def main():
+    parser = argparse.ArgumentParser()
+    parser.add_argument("--fork-id", default=FORK_ID)
+
+    args = parser.parse_args()
+    fork_id = args.fork_id
+
+    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()