Added workflow to upload mod to the steam workshop

This commit is contained in:
Wofsauge committed 2023-02-08 21:37:35 +01:00
1 parent 51bc296a07
commit 7c6ff71c58
4 files changed
+176 -1

No files matched your search

+134
View File
@@ -0,0 +1,134 @@
import os
import re
import shutil
import subprocess
import sys
SCRIPT_PATH = os.path.realpath(__file__)
SOURCE_MOD_DIRECTORY = os.path.dirname(SCRIPT_PATH)
if "GITHUB_WORKSPACE" in os.environ:
SOURCE_MOD_DIRECTORY = os.environ["GITHUB_WORKSPACE"]
LUA_FILE_PATH = os.path.join(SOURCE_MOD_DIRECTORY, "main.lua")
METADATA_XML_PATH = os.path.join(SOURCE_MOD_DIRECTORY, "metadata.xml")
LUA_VERSIONING_LINE = "EID.ModVersion ="
LUA_COMMIT_LINE = "EID.ModVersionCommit ="
def main():
#get_changes()
if not is_git_clean():
printf(
"Error: The current working directory must be clean before releasing a new version. Please push your changes to Git."
)
sys.exit(1)
# Validate that we can push and pull to the repository and that all commits are remotely synced.
current_branch_name = get_current_branch_name()
last_commit_hash = get_last_commit_hash()
subprocess.run(["git", "branch", f"--set-upstream-to=origin/{current_branch_name}", current_branch_name])
subprocess.run(["git", "pull", "--rebase"])
subprocess.run(["git", "push", "--set-upstream","origin", current_branch_name])
new_version = increment_lua_version(last_commit_hash)
set_metadata_xml_version(new_version)
subprocess.run(["git", "add", "--all"])
subprocess.run(["git", "commit", "--message", f"chore: release {new_version}"])
subprocess.run(["git", "push", "--set-upstream", "origin", current_branch_name])
printf(f"Released version: {new_version}")
def get_changes():
stdout_bytes = subprocess.check_output(["git", "log", "--no-merges","--pretty=format:\"- %s (%h)\""])
stdout = stdout_bytes.decode("utf-8")
commits = stdout.split('\n')
def is_git_clean():
stdout_bytes = subprocess.check_output(["git", "status", "--short"])
stdout = stdout_bytes.decode("utf-8")
trimmed_stdout = stdout.strip()
return len(trimmed_stdout) == 0
def get_last_commit_hash():
stdout_bytes = subprocess.check_output(["git", "rev-parse", "--short", "HEAD"])
stdout = stdout_bytes.decode("utf-8")
trimmed_stdout = stdout.strip()
return trimmed_stdout
def get_current_branch_name():
stdout_bytes = subprocess.check_output(["git", "rev-parse", "--abbrev-ref", "HEAD"])
stdout = stdout_bytes.decode("utf-8")
trimmed_stdout = stdout.strip()
return trimmed_stdout
def increment_lua_version(last_commit_hash):
if not os.path.exists(LUA_FILE_PATH):
error(f"Failed to find the Lua file at: {LUA_FILE_PATH}")
with open(LUA_FILE_PATH) as f:
text = f.read()
match = re.search(r""+LUA_VERSIONING_LINE+r" (.*)", text)
if not match:
error(f"Failed to find the version in the Lua file at: {LUA_FILE_PATH}")
version_string = match.group(1)
version_mayor = int(version_string.split('.')[0])
version_minor = int(version_string.split('.')[1])
version_minor = version_minor + 1
new_version = f"{version_mayor}.{version_minor}"
text = re.sub(
f"{LUA_VERSIONING_LINE} {version_string}",
f"{LUA_VERSIONING_LINE} {new_version}",
text,
)
commit_match = re.search(r""+LUA_COMMIT_LINE+r" (.*)", text)
if commit_match:
match_string = commit_match.group(1)
text = re.sub(
f"{LUA_COMMIT_LINE} {match_string}",
f"{LUA_COMMIT_LINE} \"{last_commit_hash}\"",
text,
)
with open(LUA_FILE_PATH, "w", newline="\n") as f:
f.write(text)
return new_version
def set_metadata_xml_version(new_version: str):
if not os.path.exists(METADATA_XML_PATH):
error(f'Failed to find the "metadata.xml" file at: {METADATA_XML_PATH}')
with open(METADATA_XML_PATH) as f:
text = f.read()
text = re.sub(
r"<version>(.+?)</version>",
f"<version>{new_version}</version>",
text,
)
with open(METADATA_XML_PATH, "w", newline="\n") as f:
f.write(text)
def error(msg: str):
printf(f"Error: {msg}")
sys.exit(1)
def printf(*args):
print(*args, flush=True)
if __name__ == "__main__":
main()
+40
View File
@@ -0,0 +1,40 @@
name: Release
on:
workflow_dispatch
jobs:
release:
name: Increase mod version
runs-on: ubuntu-latest
steps:
- name: Checkout the repository
uses: actions/checkout@v3
- uses: actions/setup-python@v4.5.0
with:
python-version: '3.10'
- name: git
run: |
# setup the username and email.
git config --local user.email "github-actions[bot]@users.noreply.github.com"
git config --local user.name "github-actions[bot]"
- run: python .github/scripts/release.py
push_to_steam:
name: Upload mod to steam workshop
runs-on: ubuntu-latest
needs: [release]
steps:
- name: Checkout the repository
uses: actions/checkout@v3
# Your other CI tasks would go here, if you have any. (e.g. building artifacts, linting)
- name: Upload the mod to Steam Workshop
uses: IsaacScript/isaac-steam-workshop-upload@v2
with:
mod_path: .
change_note: "Changes for this mod are [url=https://github.com/wofsauge/External-Item-Descriptions/releases]tracked on GitHub[/url]."
env:
CONFIG_VDF_CONTENTS: ${{ secrets.CONFIG_VDF_CONTENTS }}