Collection of Python tools to help with game development
Project description
GameDevTools
Overview ✅
GameDevTools is a collection of Python tools and utilities used in the game development
Table of Contents 📚
- Features
- Requirements
- Usage Examples
- Development & Testing
- Contribution Guide
- Support & Troubleshooting
- License & Credits
Features ✨
- Modules to copy a folder or files to a remote location or cloud drive (Amazon S3)
Requirements ⚙️
- Python 3.10 or newer
Usage Examples 🔧
-
uepyscripts.tools.archives.rotate_archives: this module allows to archive the result of packaging your game, in a shared folder. The arguments are:directory_path: The folder where to archive the packages. Note that this module will copy the archives in a sub-folder named after the current date with the formatYYYYMMdd. If a folder already exists with the same date, it will suffix with an incrementing counter_XXkeep_count: How many versions of the packages you want to keep indirectory_path. This will remove the extraneous sub-folders to only keepkeep_countitems.folder_output_file_name: Path to a text file where to write the path to the folder where the archive was copied. This is useful if you plan to use this folder for other tasks, such as sending a message in slack, or uploading the archives to an amazon S3 bucket
-
uepyscripts.tools.archives.upload_archives: this module allows to upload to an amazon S3 bucket all the files inside a folder. The arguments are:local_folder: The folder where to find the files to uploadbucket_name: The S3 bucket nameregion: The region of the bucketaccess_keyandsecret_key: The keys to access the bucketdestination_folder: The folder where to upload in the bucket. As withrotate_archives, a sub-folder with the date will be used, and if the folder exists, a suffix will be added.keep_count: Same as withrotate_archives, this is used to control how many archives you want to keep.output_file: Path to a text file where the uploaded files URLs will be stored. This can be used in your jenkinsfile to be sent to a slack channel for example.
Here's an example of how we use these 2 modules in our jenkinsfiles:
stage( 'Rotate Archives' ) {
pwsh """
. "Scripts/PyScripts/.venv/Scripts/ue-tools-archives-rotate.exe" `
--directory_path = "//nas/Versions/OurGame/Development/WIP" `
--keep_count = "-1" `
--folder_output_file_name = "${env.WORKSPACE}/Saved/Temp/latest_archive_Development.txt"
"""
def folder_name = readFile "${env.WORKSPACE}/Saved/Temp/latest_archive_Development.txt"
slackSend( channel: '#channel', message: "New Development build available : ${folder_name}" )
}
stage( 'Upload Archives' ) {
def file = readFile "${env.WORKSPACE}/Saved/Temp/latest_archive_Development.txt"
pwsh """
. "Scripts/PyScripts/.venv/Scripts/ue-tools-archives-upload.exe" `
--local_folder = "${file}" `
--bucket_name = "artifacts" `
--region = "eu-west-3" `
--access_key = "XXXXX" `
--secret_key = "YYYYY" `
--destination_folder = "Development/" `
--keep_count = "-1" `
--output_file = "${env.WORKSPACE}/Saved/Temp/uploaded_files_Development.txt" `
"""
def uploaded_files = readFile "${env.WORKSPACE}/Saved/Temp/uploaded_files_Development.txt"
def lines = uploaded_files.split('\n')
if ( lines.size() > 0 ) {
def message = 'Uploaded builds:\n'
lines.each { String line ->
def parts = line.split(' : ', 2)
if (parts.size() == 2) {
def url = parts[0].trim()
def filename = parts[1].trim()
message += "<${url}|${filename}>\n"
}
}
slackSend( channel: '#channel', message: message )
} else {
slackSend( channel: '#channel', color: 'danger', message: 'No files were uploaded' )
}
}
Development & Testing 🧪
-
Setup dev environment and install dependencies:
.\setup_venv.ps1 .\.venv\Scripts\Activate.ps1
-
Linting & formatting
- Use
ruff check .,ruff format .andmypy .
- Use
Contribution Guide 🤝
We welcome contributions — please follow these steps:
- Fork the repository
- Create a feature branch:
git checkout -b feature/your-change - Run lint locally
- Submit a pull request describing the change
Support & Troubleshooting ❓
- Check
Config/anduepyscripts/internal/config.pyfor project-specific settings. - If
buildgraphfails, ensureConfig/Projecthas a validBuildgraphPathand the UAT tool is accessible. - When reporting issues, include:
- Python version
- Unreal Engine version
- Exact command and full logs
License & Credits 📝
License: MIT — see the LICENSE file.
Maintainers: Michael Delva and contributors (see AUTHORS or repository metadata).
Changelog: See CHANGELOG.md
Made with ❤️ for Game Dev developers — contributions and feedback are welcome! If this helped you, consider starring the repository. ⭐
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file gamedevtools-1.0.2-py3-none-any.whl.
File metadata
- Download URL: gamedevtools-1.0.2-py3-none-any.whl
- Upload date:
- Size: 13.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ae34a09868af4f9d436026b0bead36f54aca0407dd7b70989b6a82ee81a3ac79
|
|
| MD5 |
51d7dc398800633ca0cc2c021b41dc07
|
|
| BLAKE2b-256 |
ef2d72242e68ee38d7c11c0f2988a6cd28caea2f908d174d0c02a698684c15ae
|
Provenance
The following attestation bundles were made for gamedevtools-1.0.2-py3-none-any.whl:
Publisher:
release.yml on TheEmidee/PyGameDevTools
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
gamedevtools-1.0.2-py3-none-any.whl -
Subject digest:
ae34a09868af4f9d436026b0bead36f54aca0407dd7b70989b6a82ee81a3ac79 - Sigstore transparency entry: 855302632
- Sigstore integration time:
-
Permalink:
TheEmidee/PyGameDevTools@4fe8b5efc08ba30015718a1cb733921eaf64b943 -
Branch / Tag:
refs/tags/v1.0.2 - Owner: https://github.com/TheEmidee
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@4fe8b5efc08ba30015718a1cb733921eaf64b943 -
Trigger Event:
push
-
Statement type: