diff --git a/.bumpversion.cfg b/.bumpversion.cfg new file mode 100644 index 0000000..8d9fa76 --- /dev/null +++ b/.bumpversion.cfg @@ -0,0 +1,11 @@ +[bumpversion] +current_version = 0.0.0 +commit = False +tag = True +tag_name = {new_version} + +[semver] +main_branches = master +major_branches = +minor_branches = feature +patch_branches = hotfix, bugfix \ No newline at end of file diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index 49beecc..0000000 --- a/.gitattributes +++ /dev/null @@ -1,3 +0,0 @@ -# Auto detect text files and perform LF normalization -* text=auto -* eol=lf diff --git a/.github/workflows/test_action_3.x.yml b/.github/workflows/test_action_3.x.yml new file mode 100644 index 0000000..5d8aa9e --- /dev/null +++ b/.github/workflows/test_action_3.x.yml @@ -0,0 +1,17 @@ +name: Test Action 3.x + +on: [push, pull_request] + +jobs: + TestAction: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v1 + - name: Run Action + uses: ./ + with: + name: test_project + preset: linux + projectDir: 3.x_test_project + package: 'true' \ No newline at end of file diff --git a/.github/workflows/test_action_4.x.yml b/.github/workflows/test_action_4.x.yml new file mode 100644 index 0000000..6e685cd --- /dev/null +++ b/.github/workflows/test_action_4.x.yml @@ -0,0 +1,18 @@ +name: Test Action 4.x +on: + push: + branches: [ 'master', 'main', 'prod', 'production' ] + +jobs: + TestAction: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v1 + - name: Run Action + uses: ./ + with: + name: test_project + preset: linux + projectDir: 4.x_test_project + package: 'true' \ No newline at end of file diff --git a/.github/workflows/version.yml b/.github/workflows/version.yml new file mode 100644 index 0000000..b70c1f9 --- /dev/null +++ b/.github/workflows/version.yml @@ -0,0 +1,30 @@ +name: Version & Release + +on: + push: + branches: + - master + +jobs: + CheckVersion: + runs-on: ubuntu-latest + container: + image: rightbrainnetworks/auto-semver + steps: + - name: Checkout + uses: actions/checkout@v1 + - name: Run Auto-Semver + id: semver + uses: RightBrain-Networks/semver-action@1.0.0 + - name: Create Release + id: create_release + uses: actions/create-release@v1 + if: steps['semver']['outputs']['RETURN_STATUS'] == '0' + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: ${{ steps.semver.outputs.SEMVER_NEW_VERSION }} + release_name: ${{ steps.semver.outputs.SEMVER_NEW_VERSION }} + body: Release Version ${{ steps.semver.outputs.SEMVER_NEW_VERSION }} + draft: false + prerelease: false \ No newline at end of file diff --git a/3.x_test_project/.import/icon.png-487276ed1e3a0c39cad0279d744ee560.md5 b/3.x_test_project/.import/icon.png-487276ed1e3a0c39cad0279d744ee560.md5 new file mode 100644 index 0000000..a111eea --- /dev/null +++ b/3.x_test_project/.import/icon.png-487276ed1e3a0c39cad0279d744ee560.md5 @@ -0,0 +1,3 @@ +source_md5="0167658bc4406f0d0fe437e0197c415a" +dest_md5="64b0613b3173e1e1c96dd18b6569e62d" + diff --git a/3.x_test_project/default_env.tres b/3.x_test_project/default_env.tres new file mode 100644 index 0000000..20207a4 --- /dev/null +++ b/3.x_test_project/default_env.tres @@ -0,0 +1,7 @@ +[gd_resource type="Environment" load_steps=2 format=2] + +[sub_resource type="ProceduralSky" id=1] + +[resource] +background_mode = 2 +background_sky = SubResource( 1 ) diff --git a/3.x_test_project/empty_scene.tscn b/3.x_test_project/empty_scene.tscn new file mode 100644 index 0000000..b171e8d --- /dev/null +++ b/3.x_test_project/empty_scene.tscn @@ -0,0 +1,3 @@ +[gd_scene format=2] + +[node name="Node2D" type="Node2D"] diff --git a/3.x_test_project/export_presets.cfg b/3.x_test_project/export_presets.cfg new file mode 100644 index 0000000..15d23b4 --- /dev/null +++ b/3.x_test_project/export_presets.cfg @@ -0,0 +1,25 @@ +[preset.0] + +name="linux" +platform="Linux/X11" +runnable=true +custom_features="" +export_filter="all_resources" +include_filter="" +exclude_filter="" +export_path="../../test_project.x86_64" +patch_list=PoolStringArray( ) +script_export_mode=1 +script_encryption_key="" + +[preset.0.options] + +texture_format/bptc=false +texture_format/s3tc=true +texture_format/etc=false +texture_format/etc2=false +texture_format/no_bptc_fallbacks=true +binary_format/64_bits=true +binary_format/embed_pck=false +custom_template/release="" +custom_template/debug="" diff --git a/3.x_test_project/project.godot b/3.x_test_project/project.godot new file mode 100644 index 0000000..f645dad --- /dev/null +++ b/3.x_test_project/project.godot @@ -0,0 +1,23 @@ +; Engine configuration file. +; It's best edited using the editor UI and not directly, +; since the parameters that go here are not all obvious. +; +; Format: +; [section] ; section goes between [] +; param=value ; assign values to parameters + +config_version=4 + +_global_script_classes=[ ] +_global_script_class_icons={ + +} + +[application] + +config/name="test_project" +run/main_scene="res://empty_scene.tscn" + +[rendering] + +environment/default_environment="res://default_env.tres" diff --git a/4.x_test_project/.gitattributes b/4.x_test_project/.gitattributes new file mode 100644 index 0000000..8ad74f7 --- /dev/null +++ b/4.x_test_project/.gitattributes @@ -0,0 +1,2 @@ +# Normalize EOL for all files that Git considers text files. +* text=auto eol=lf diff --git a/4.x_test_project/.gitignore b/4.x_test_project/.gitignore new file mode 100644 index 0000000..4709183 --- /dev/null +++ b/4.x_test_project/.gitignore @@ -0,0 +1,2 @@ +# Godot 4+ specific ignores +.godot/ diff --git a/4.x_test_project/export_presets.cfg b/4.x_test_project/export_presets.cfg new file mode 100644 index 0000000..d503ea3 --- /dev/null +++ b/4.x_test_project/export_presets.cfg @@ -0,0 +1,106 @@ +[preset.0] + +name="linux" +platform="Linux/X11" +runnable=true +dedicated_server=false +custom_features="" +export_filter="all_resources" +include_filter="" +exclude_filter="" +export_path="" +encryption_include_filters="" +encryption_exclude_filters="" +encrypt_pck=false +encrypt_directory=false +script_encryption_key="" + +[preset.0.options] + +custom_template/debug="" +custom_template/release="" +debug/export_console_script=1 +binary_format/embed_pck=false +texture_format/bptc=true +texture_format/s3tc=true +texture_format/etc=false +texture_format/etc2=false +binary_format/architecture="x86_64" +ssh_remote_deploy/enabled=false +ssh_remote_deploy/host="user@host_ip" +ssh_remote_deploy/port="22" +ssh_remote_deploy/extra_args_ssh="" +ssh_remote_deploy/extra_args_scp="" +ssh_remote_deploy/run_script="#!/usr/bin/env bash +export DISPLAY=:0 +unzip -o -q \"{temp_dir}/{archive_name}\" -d \"{temp_dir}\" +\"{temp_dir}/{exe_name}\" {cmd_args}" +ssh_remote_deploy/cleanup_script="#!/usr/bin/env bash +kill $(pgrep -x -f \"{temp_dir}/{exe_name} {cmd_args}\") +rm -rf \"{temp_dir}\"" + +[preset.1] + +name="windows" +platform="Windows Desktop" +runnable=true +dedicated_server=false +custom_features="" +export_filter="all_resources" +include_filter="" +exclude_filter="" +export_path="" +encryption_include_filters="" +encryption_exclude_filters="" +encrypt_pck=false +encrypt_directory=false +script_encryption_key="" + +[preset.1.options] + +custom_template/debug="" +custom_template/release="" +debug/export_console_script=1 +binary_format/embed_pck=false +texture_format/bptc=true +texture_format/s3tc=true +texture_format/etc=false +texture_format/etc2=false +binary_format/architecture="x86_64" +codesign/enable=false +codesign/identity_type=0 +codesign/identity="" +codesign/password="" +codesign/timestamp=true +codesign/timestamp_server_url="" +codesign/digest_algorithm=1 +codesign/description="" +codesign/custom_options=PackedStringArray() +application/modify_resources=true +application/icon="" +application/console_wrapper_icon="" +application/icon_interpolation=4 +application/file_version="" +application/product_version="" +application/company_name="" +application/product_name="" +application/file_description="" +application/copyright="" +application/trademarks="" +ssh_remote_deploy/enabled=false +ssh_remote_deploy/host="user@host_ip" +ssh_remote_deploy/port="22" +ssh_remote_deploy/extra_args_ssh="" +ssh_remote_deploy/extra_args_scp="" +ssh_remote_deploy/run_script="Expand-Archive -LiteralPath '{temp_dir}\\{archive_name}' -DestinationPath '{temp_dir}' +$action = New-ScheduledTaskAction -Execute '{temp_dir}\\{exe_name}' -Argument '{cmd_args}' +$trigger = New-ScheduledTaskTrigger -Once -At 00:00 +$settings = New-ScheduledTaskSettingsSet +$task = New-ScheduledTask -Action $action -Trigger $trigger -Settings $settings +Register-ScheduledTask godot_remote_debug -InputObject $task -Force:$true +Start-ScheduledTask -TaskName godot_remote_debug +while (Get-ScheduledTask -TaskName godot_remote_debug | ? State -eq running) { Start-Sleep -Milliseconds 100 } +Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue" +ssh_remote_deploy/cleanup_script="Stop-ScheduledTask -TaskName godot_remote_debug -ErrorAction:SilentlyContinue +Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue +Remove-Item -Recurse -Force '{temp_dir}'" diff --git a/4.x_test_project/icon.svg b/4.x_test_project/icon.svg new file mode 100644 index 0000000..adc26df --- /dev/null +++ b/4.x_test_project/icon.svg @@ -0,0 +1 @@ + diff --git a/4.x_test_project/icon.svg.import b/4.x_test_project/icon.svg.import new file mode 100644 index 0000000..58c0fb1 --- /dev/null +++ b/4.x_test_project/icon.svg.import @@ -0,0 +1,37 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bektdji2blm55" +path="res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://icon.svg" +dest_files=["res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/4.x_test_project/project.godot b/4.x_test_project/project.godot new file mode 100644 index 0000000..1d26b4f --- /dev/null +++ b/4.x_test_project/project.godot @@ -0,0 +1,15 @@ +; Engine configuration file. +; It's best edited using the editor UI and not directly, +; since the parameters that go here are not all obvious. +; +; Format: +; [section] ; section goes between [] +; param=value ; assign values to parameters + +config_version=5 + +[application] + +config/name="Test Project" +config/features=PackedStringArray("4.0", "Forward Plus") +config/icon="res://icon.svg" diff --git a/Contributors.md b/Contributors.md new file mode 100644 index 0000000..fe0b3a0 --- /dev/null +++ b/Contributors.md @@ -0,0 +1,19 @@ +# Build Godot Action Contributors + +## Maintainers + +Name | Email | Twitter | +-----|-------|---------| +[Joseph Manley](https://github.com/josephbmanley) | [joseph@cloudsumu.com](mailto:joseph@cloudsumu.com) | [@josephbmanley](https://twitter.com/josephbmanley) + +## Contributors + +A giant thanks to everyone put in the time to improve Godot CI! + +Name | Email | Twitter | +---- | ----- | ------- | +[Tomer Keren](https://github.com/Tadaboody) | [tomerpet@gmail.com](tomerpet@gmail.com) | [@Tadaboody](https://twitter.com/Tadaboody) + +## Additional Credits + +This action uses the [godot-ci](https://github.com/aBARICHELLO/godot-ci) docker image from [BARICHELLO](https://github.com/aBARICHELLO) \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index b7b8031..94ea8a7 100644 --- a/Dockerfile +++ b/Dockerfile @@ -5,7 +5,11 @@ LABEL "com.github.actions.description"="Build a Godot project for multiple platf LABEL "com.github.actions.icon"="loader" LABEL "com.github.actions.color"="blue" +LABEL repository="https://github.com/josephbmanley/build-godot-action" +LABEL homepage="https://cloudsumu.com/" +LABEL maintainer="Joseph Manley " + USER root ADD entrypoint.sh /entrypoint.sh RUN chmod +x entrypoint.sh -ENTRYPOINT ["/entrypoint.sh"] +ENTRYPOINT ["/entrypoint.sh"] \ No newline at end of file diff --git a/README.md b/ReadMe.md similarity index 86% rename from README.md rename to ReadMe.md index d91f808..d6f6f6f 100644 --- a/README.md +++ b/ReadMe.md @@ -1,13 +1,13 @@ -![Release Version](https://img.shields.io/github/v/release/felix-schindler/build-godot-action) +![Release Version](https://img.shields.io/github/v/release/josephbmanley/build-godot-action) ![Test Action](https://github.com/josephbmanley/build-godot-action/workflows/Test%20Action/badge.svg) ![Build Godot Project](logo.png) This action builds the godot project in your `$GITHUB_WORKSPACE`, so that you can easily automate builds. Table of Contents: - -- [Quickstart](#quickstart) -- [Usage](#usage) +- [Quickstart](#Quickstart) +- [Usage](#Usage) +- [Contributors](Contributors.md) ## Quickstart @@ -42,7 +42,7 @@ jobs: lfs: true - name: Build id: build - uses: felix-schindler/build-godot-action@v2.0.0 + uses: manleydev/build-godot-action@v1.4.1 with: name: example preset: ${{ matrix.platform }} @@ -60,7 +60,6 @@ This workflow has three steps: - **Checkout**: The Checkout step clones the project on the GitHub actions runner. - **Build**: This step uses this action to build the Godot project. - **Upload Artifact**: The Upload Artifact step uploads the output from the build step. - > You could also use something like [softprops/action-gh-release](https://github.com/softprops/action-gh-release) to create automated releases of your game, instead of just uploading it as a artifact. **Matrix Explaination**: The matrix object runs the job for EACH possible value. So in this job, we are using a `platform` matrix to automatically run our workflow for the values `linux`, `windows`, and `mac`. @@ -83,7 +82,7 @@ Additionally if you are not using a matrix, you can set the export preset as the ```yaml - name: Build id: build - uses: felix-schindler/build-godot-action@v2.0.0 + uses: manleydev/build-godot-action@v1.4.1 with: name: example preset: win32 @@ -96,7 +95,7 @@ To change the export name, you can the `name` parameter to whatever you want you ```yaml - name: Build id: build - uses: felix-schindler/build-godot-action@v2.0.0 + uses: manleydev/build-godot-action@v1.4.1 with: name: test # This project will export with the name "test" ``` @@ -108,7 +107,7 @@ This example is set to build with debug mode enable. To disable debug, either se ```yaml - name: Build id: build - uses: felix-schindler/build-godot-action@v2.0.0 + uses: manleydev/build-godot-action@v1.4.1 with: name: example preset: ${{ matrix.platform }} @@ -122,7 +121,7 @@ If your project is located in a subdirectory, you can use the `projectDir` to ch ```yaml - name: Build id: build - uses: felix-schindler/build-godot-action@v2.0.0 + uses: manleydev/build-godot-action@v1.4.1 with: name: example preset: ${{ matrix.platform }} @@ -143,7 +142,7 @@ Example: ```yaml steps: -- uses: felix-schindler/build-godot-action@[VERSION] +- uses: manleydev/build-godot-action@[VERSION] with: name: godot-project preset: HTML5 @@ -159,6 +158,12 @@ steps: The name of the preset found in `export_presets.cfg` you would like to build. +#### subdirectory + + *Optional* + + The subdirectory in the `build` folder to output build to, can be useful for self packaging. + #### package *Optional* diff --git a/action.yml b/action.yml index 043b96e..51d3ed0 100644 --- a/action.yml +++ b/action.yml @@ -1,4 +1,4 @@ -name: "Build Godot Games" +name: "Build Godot" description: "Build a Godot project for multiple platforms" author: josephbmanley inputs: @@ -9,7 +9,7 @@ inputs: description: 'Name of the preset in `export_presets.cfg` to use' required: true subdirectory: - description: 'This has been removed, please do not use.' + description: 'Optional name of the subdirectory to put exported project in' default: "" package: description: 'Set true to output an artifact zip file' diff --git a/entrypoint.sh b/entrypoint.sh index 62ee593..5617260 100644 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -3,14 +3,12 @@ set -e # Move godot templates already installed from the docker image to home mkdir -v -p ~/.local/share/godot/export_templates -mkdir ./Builds -# cp -a -f /root/.local/share/godot/export_templates/. ~/.local/share/godot/export_templates/ +cp -a /root/.local/share/godot/export_templates/. ~/.local/share/godot/export_templates/ if [ "$3" != "" ] then - echo "SubDirectories are no longer supported." - exit 1 + SubDirectoryLocation="$3/" fi mode="export-release" @@ -22,27 +20,20 @@ fi # Export for project echo "Building $1 for $2" +mkdir -p $GITHUB_WORKSPACE/build/${SubDirectoryLocation:-""} cd "$GITHUB_WORKSPACE/$5" -godot ./project.godot --headless --${mode} "$2" +godot --headless --${mode} "$2" $GITHUB_WORKSPACE/build/${SubDirectoryLocation:-""}$1 echo "Build Done" -ls -la ./Builds - -if [ "$5" != "" ] -then - BUILD_PATH="$GITHUB_WORKSPACE/$5/build/" -else - BUILD_PATH="$GITHUB_WORKSPACE/build/" -fi -echo build=$BUILD_PATH >> $GITHUB_OUTPUT +echo ::set-output name=build::build/${SubDirectoryLocation:-""} if [ "$4" = "true" ] then echo "Packing Build" mkdir -p $GITHUB_WORKSPACE/package - cd ./Builds - zip $GITHUB_WORKSPACE/package/artifact.zip . -r - echo artifact=package/artifact.zip >> $GITHUB_OUTPUT + cd $GITHUB_WORKSPACE/build + zip $GITHUB_WORKSPACE/package/artifact.zip ${SubDirectoryLocation:-"."} -r + echo ::set-output name=artifact::package/artifact.zip echo "Done" fi