Added workflow to upload mod to the steam workshop
This commit is contained in:
1 parent
51bc296a07
commit
7c6ff71c58
4 files changed
+176
-1
No files matched your search
@@ -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()
|
||||
@@ -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 }}
|
||||
Reference in new issue
Block a user