mirror of
				https://github.com/chickensoft-games/setup-godot.git
				synced 2025-10-31 09:03:56 +00:00 
			
		
		
		
	feat: add export templates
This commit is contained in:
		
							parent
							
								
									41ce0e3de8
								
							
						
					
					
						commit
						9f83926bad
					
				
							
								
								
									
										3
									
								
								.gitattributes
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								.gitattributes
									
									
									
									
										vendored
									
									
								
							| @ -1 +1,2 @@ | ||||
| dist/** -diff linguist-generated=true  | ||||
| dist/** -diff linguist-generated=true  | ||||
| * text=auto | ||||
|  | ||||
							
								
								
									
										4
									
								
								.github/workflows/check-dist.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								.github/workflows/check-dist.yml
									
									
									
									
										vendored
									
									
								
							| @ -7,8 +7,6 @@ name: Check dist/ | ||||
| 
 | ||||
| on: | ||||
|   push: | ||||
|     branches: | ||||
|       - main | ||||
|     paths-ignore: | ||||
|       - '**.md' | ||||
|   pull_request: | ||||
| @ -46,7 +44,7 @@ jobs: | ||||
|         id: diff | ||||
| 
 | ||||
|       # If index.js was different than expected, upload the expected version as an artifact | ||||
|       - uses: actions/upload-artifact@v2 | ||||
|       - uses: actions/upload-artifact@v3 | ||||
|         if: ${{ failure() && steps.diff.conclusion == 'failure' }} | ||||
|         with: | ||||
|           name: dist | ||||
|  | ||||
							
								
								
									
										3
									
								
								.github/workflows/test.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								.github/workflows/test.yml
									
									
									
									
										vendored
									
									
								
							| @ -2,9 +2,6 @@ name: 'build-test' | ||||
| on: # rebuild any PRs and main branch changes | ||||
|   pull_request: | ||||
|   push: | ||||
|     branches: | ||||
|       - main | ||||
|       - 'releases/*' | ||||
| 
 | ||||
| jobs: | ||||
|   tests: | ||||
|  | ||||
| @ -1,6 +1,8 @@ | ||||
| import {describe, expect, test} from '@jest/globals' | ||||
| import path from 'path' | ||||
| import os from 'os' | ||||
| 
 | ||||
| import {getGodotUrl, getPlatform, parseVersion} from '../src/utils' | ||||
| import {getGodotUrl, getPlatform, parseVersion, getExportTemplatePath} from '../src/utils' | ||||
| 
 | ||||
| describe('parseVersion', () => { | ||||
|   test('parses valid godot versions', () => { | ||||
| @ -30,75 +32,195 @@ describe('parseVersion', () => { | ||||
| describe('getGodotUrl', () => { | ||||
|   describe('useDotnet = true', () => { | ||||
|     test('4.0.0-beta1', () => { | ||||
|       expect(getGodotUrl('4.0.0-beta1', getPlatform('linux'), true)).toEqual( | ||||
|       expect(getGodotUrl('4.0.0-beta1', getPlatform('linux'), true, false)).toEqual( | ||||
|         'https://downloads.tuxfamily.org/godotengine/4.0/beta1/mono/Godot_v4.0-beta1_mono_linux_x86_64.zip' | ||||
|       ) | ||||
|       expect(getGodotUrl('4.0.0-beta1', getPlatform('win32'), true)).toEqual( | ||||
|       expect(getGodotUrl('4.0.0-beta1', getPlatform('win32'), true, false)).toEqual( | ||||
|         'https://downloads.tuxfamily.org/godotengine/4.0/beta1/mono/Godot_v4.0-beta1_mono_win64.zip' | ||||
|       ) | ||||
|       expect(getGodotUrl('4.0.0-beta1', getPlatform('darwin'), true)).toEqual( | ||||
|       expect(getGodotUrl('4.0.0-beta1', getPlatform('darwin'), true, false)).toEqual( | ||||
|         'https://downloads.tuxfamily.org/godotengine/4.0/beta1/mono/Godot_v4.0-beta1_mono_macos.universal.zip' | ||||
|       ) | ||||
|       expect(getGodotUrl('4.0.0-beta1', getPlatform('linux'), true, true)).toEqual( | ||||
|         'https://downloads.tuxfamily.org/godotengine/4.0/beta1/mono/Godot_v4.0-beta1_mono_export_templates.tpz' | ||||
|       ) | ||||
|     }) | ||||
|     test('4.0.0-beta.16', () => { | ||||
|       expect(getGodotUrl('4.0.0-beta.16', getPlatform('linux'), true)).toEqual( | ||||
|       expect(getGodotUrl('4.0.0-beta.16', getPlatform('linux'), true, false)).toEqual( | ||||
|         'https://downloads.tuxfamily.org/godotengine/4.0/beta16/mono/Godot_v4.0-beta16_mono_linux_x86_64.zip' | ||||
|       ) | ||||
|       expect(getGodotUrl('4.0.0-beta.16', getPlatform('win32'), true)).toEqual( | ||||
|       expect(getGodotUrl('4.0.0-beta.16', getPlatform('win32'), true, false)).toEqual( | ||||
|         'https://downloads.tuxfamily.org/godotengine/4.0/beta16/mono/Godot_v4.0-beta16_mono_win64.zip' | ||||
|       ) | ||||
|       expect(getGodotUrl('4.0.0-beta.16', getPlatform('darwin'), true)).toEqual( | ||||
|       expect(getGodotUrl('4.0.0-beta.16', getPlatform('darwin'), true, false)).toEqual( | ||||
|         'https://downloads.tuxfamily.org/godotengine/4.0/beta16/mono/Godot_v4.0-beta16_mono_macos.universal.zip' | ||||
|       ) | ||||
|     }) | ||||
|     test('4.0.0-beta8', () => { | ||||
|       expect(getGodotUrl('4.0.0-beta8', getPlatform('linux'), true)).toEqual( | ||||
|       expect(getGodotUrl('4.0.0-beta8', getPlatform('linux'), true, false)).toEqual( | ||||
|         'https://downloads.tuxfamily.org/godotengine/4.0/beta8/mono/Godot_v4.0-beta8_mono_linux_x86_64.zip' | ||||
|       ) | ||||
|       expect(getGodotUrl('4.0.0-beta8', getPlatform('win32'), true)).toEqual( | ||||
|       expect(getGodotUrl('4.0.0-beta8', getPlatform('win32'), true, false)).toEqual( | ||||
|         'https://downloads.tuxfamily.org/godotengine/4.0/beta8/mono/Godot_v4.0-beta8_mono_win64.zip' | ||||
|       ) | ||||
|       expect(getGodotUrl('4.0.0-beta8', getPlatform('darwin'), true)).toEqual( | ||||
|       expect(getGodotUrl('4.0.0-beta8', getPlatform('darwin'), true, false)).toEqual( | ||||
|         'https://downloads.tuxfamily.org/godotengine/4.0/beta8/mono/Godot_v4.0-beta8_mono_macos.universal.zip' | ||||
|       ) | ||||
|     }) | ||||
|     test('4.0.0', () => { | ||||
|       expect(getGodotUrl('4.0.0', getPlatform('linux'), true)).toEqual( | ||||
|       expect(getGodotUrl('4.0.0', getPlatform('linux'), true, false)).toEqual( | ||||
|         'https://downloads.tuxfamily.org/godotengine/4.0/mono/Godot_v4.0-stable_mono_linux_x86_64.zip' | ||||
|       ) | ||||
|       expect(getGodotUrl('4.0.0', getPlatform('win32'), true)).toEqual( | ||||
|       expect(getGodotUrl('4.0.0', getPlatform('win32'), true, false)).toEqual( | ||||
|         'https://downloads.tuxfamily.org/godotengine/4.0/mono/Godot_v4.0-stable_mono_win64.zip' | ||||
|       ) | ||||
|       expect(getGodotUrl('4.0.0', getPlatform('darwin'), true)).toEqual( | ||||
|       expect(getGodotUrl('4.0.0', getPlatform('darwin'), true, false)).toEqual( | ||||
|         'https://downloads.tuxfamily.org/godotengine/4.0/mono/Godot_v4.0-stable_mono_macos.universal.zip' | ||||
|       ) | ||||
|       expect(getGodotUrl('4.0.0', getPlatform('linux'), true, true)).toEqual( | ||||
|         'https://downloads.tuxfamily.org/godotengine/4.0/mono/Godot_v4.0-stable_mono_export_templates.tpz' | ||||
|       ) | ||||
|     }) | ||||
|     test('3.5.2', () => { | ||||
|       expect(getGodotUrl('3.5.2', getPlatform('linux'), true, true)).toEqual( | ||||
|         'https://downloads.tuxfamily.org/godotengine/3.5.2/mono/Godot_v3.5.2-stable_mono_export_templates.tpz' | ||||
|       ) | ||||
|     }) | ||||
|   }) | ||||
| 
 | ||||
|   describe('useDotnet = false', () => { | ||||
|     test('4.0.0-beta1', () => { | ||||
|       expect(getGodotUrl('4.0.0-beta1', getPlatform('linux'), false)).toEqual( | ||||
|       expect(getGodotUrl('4.0.0-beta1', getPlatform('linux'), false, false)).toEqual( | ||||
|         'https://downloads.tuxfamily.org/godotengine/4.0/beta1/Godot_v4.0-beta1_linux.x86_64.zip' | ||||
|       ) | ||||
|       expect(getGodotUrl('4.0.0-beta1', getPlatform('win32'), false)).toEqual( | ||||
|       expect(getGodotUrl('4.0.0-beta1', getPlatform('win32'), false, false)).toEqual( | ||||
|         'https://downloads.tuxfamily.org/godotengine/4.0/beta1/Godot_v4.0-beta1_win64.exe.zip' | ||||
|       ) | ||||
|       expect(getGodotUrl('4.0.0-beta1', getPlatform('darwin'), false)).toEqual( | ||||
|       expect(getGodotUrl('4.0.0-beta1', getPlatform('darwin'), false, false)).toEqual( | ||||
|         'https://downloads.tuxfamily.org/godotengine/4.0/beta1/Godot_v4.0-beta1_macos.universal.zip' | ||||
|       ) | ||||
|       expect(getGodotUrl('4.0.0-beta1', getPlatform('darwin'), false, true)).toEqual( | ||||
|         'https://downloads.tuxfamily.org/godotengine/4.0/beta1/Godot_v4.0-beta1_export_templates.tpz' | ||||
|       ) | ||||
|     }) | ||||
|     test('4.0.0-beta.16', () => { | ||||
|       expect(getGodotUrl('4.0.0-beta.16', getPlatform('linux'), false)).toEqual( | ||||
|       expect(getGodotUrl('4.0.0-beta.16', getPlatform('linux'), false, false)).toEqual( | ||||
|         'https://downloads.tuxfamily.org/godotengine/4.0/beta16/Godot_v4.0-beta16_linux.x86_64.zip' | ||||
|       ) | ||||
|       expect(getGodotUrl('4.0.0-beta.16', getPlatform('win32'), false)).toEqual( | ||||
|       expect(getGodotUrl('4.0.0-beta.16', getPlatform('win32'), false, false)).toEqual( | ||||
|         'https://downloads.tuxfamily.org/godotengine/4.0/beta16/Godot_v4.0-beta16_win64.exe.zip' | ||||
|       ) | ||||
|       expect( | ||||
|         getGodotUrl('4.0.0-beta.16', getPlatform('darwin'), false) | ||||
|         getGodotUrl('4.0.0-beta.16', getPlatform('darwin'), false, false) | ||||
|       ).toEqual( | ||||
|         'https://downloads.tuxfamily.org/godotengine/4.0/beta16/Godot_v4.0-beta16_macos.universal.zip' | ||||
|       ) | ||||
|     }) | ||||
|     test('4.0.0', () => { | ||||
|       expect(getGodotUrl('4.0.0', getPlatform('linux'), false, true)).toEqual( | ||||
|         'https://downloads.tuxfamily.org/godotengine/4.0/Godot_v4.0-stable_export_templates.tpz' | ||||
|       ) | ||||
|     }) | ||||
|     test('3.5.2', () => { | ||||
|       expect(getGodotUrl('3.5.2', getPlatform('linux'), false, true)).toEqual( | ||||
|         'https://downloads.tuxfamily.org/godotengine/3.5.2/Godot_v3.5.2-stable_export_templates.tpz' | ||||
|       ) | ||||
|     }) | ||||
|   }) | ||||
| }) | ||||
| 
 | ||||
| describe('getExportTemplatePath', () => { | ||||
|   describe('useDotnet = true', () => { | ||||
|     test('4.0.0-beta1', () => { | ||||
|       expect(getExportTemplatePath('4.0.0-beta1', getPlatform('linux'), true)).toEqual( | ||||
|         path.join(os.homedir(), '.local/share/godot/export_templates', '4.0.beta1.mono') | ||||
|       ) | ||||
|       expect(getExportTemplatePath('4.0.0-beta1', getPlatform('win32'), true)).toEqual( | ||||
|         path.join(os.homedir(), 'AppData/Roaming/Godot/export_templates', '4.0.beta1.mono') | ||||
|               ) | ||||
|       expect(getExportTemplatePath('4.0.0-beta1', getPlatform('darwin'), true)).toEqual( | ||||
|         path.join(os.homedir(), '/Library/Application Support/Godot/export_templates', '4.0.beta1.mono') | ||||
|       ) | ||||
|     }) | ||||
|     test('4.0.0', () => { | ||||
|       expect(getExportTemplatePath('4.0.0', getPlatform('linux'), true)).toEqual( | ||||
|         path.join(os.homedir(), '.local/share/godot/export_templates', '4.0.stable.mono') | ||||
|       ) | ||||
|       expect(getExportTemplatePath('4.0.0', getPlatform('win32'), true)).toEqual( | ||||
|         path.join(os.homedir(), 'AppData/Roaming/Godot/export_templates', '4.0.stable.mono') | ||||
|               ) | ||||
|       expect(getExportTemplatePath('4.0.0', getPlatform('darwin'), true)).toEqual( | ||||
|         path.join(os.homedir(), '/Library/Application Support/Godot/export_templates', '4.0.stable.mono') | ||||
|       ) | ||||
|     }) | ||||
|     test('3.5.1', () => { | ||||
|       expect(getExportTemplatePath('3.5.1', getPlatform('linux'), true)).toEqual( | ||||
|         path.join(os.homedir(), '.local/share/godot/templates', '3.5.1.stable.mono') | ||||
|       ) | ||||
|       expect(getExportTemplatePath('3.5.1', getPlatform('win32'), true)).toEqual( | ||||
|         path.join(os.homedir(), 'AppData/Roaming/Godot/templates', '3.5.1.stable.mono') | ||||
|               ) | ||||
|       expect(getExportTemplatePath('3.5.1', getPlatform('darwin'), true)).toEqual( | ||||
|         path.join(os.homedir(), '/Library/Application Support/Godot/templates', '3.5.1.stable.mono') | ||||
|       ) | ||||
|     }) | ||||
|     test('3.5.0', () => { | ||||
|       expect(getExportTemplatePath('3.5.0', getPlatform('linux'), true)).toEqual( | ||||
|         path.join(os.homedir(), '.local/share/godot/templates', '3.5.stable.mono') | ||||
|       ) | ||||
|       expect(getExportTemplatePath('3.5.0', getPlatform('win32'), true)).toEqual( | ||||
|         path.join(os.homedir(), 'AppData/Roaming/Godot/templates', '3.5.stable.mono') | ||||
|               ) | ||||
|       expect(getExportTemplatePath('3.5.0', getPlatform('darwin'), true)).toEqual( | ||||
|         path.join(os.homedir(), '/Library/Application Support/Godot/templates', '3.5.stable.mono') | ||||
|       ) | ||||
|     }) | ||||
|   }) | ||||
| 
 | ||||
|   describe('useDotnet = false', () => { | ||||
|     test('4.0.0-beta1', () => { | ||||
|       expect(getExportTemplatePath('4.0.0-beta1', getPlatform('linux'), false)).toEqual( | ||||
|         path.join(os.homedir(), '.local/share/godot/export_templates', '4.0.beta1') | ||||
|       ) | ||||
|       expect(getExportTemplatePath('4.0.0-beta1', getPlatform('win32'), false)).toEqual( | ||||
|         path.join(os.homedir(), 'AppData/Roaming/Godot/export_templates', '4.0.beta1') | ||||
|               ) | ||||
|       expect(getExportTemplatePath('4.0.0-beta1', getPlatform('darwin'), false)).toEqual( | ||||
|         path.join(os.homedir(), '/Library/Application Support/Godot/export_templates', '4.0.beta1') | ||||
|       ) | ||||
|     }) | ||||
|     test('4.0.0', () => { | ||||
|       expect(getExportTemplatePath('4.0.0', getPlatform('linux'), false)).toEqual( | ||||
|         path.join(os.homedir(), '.local/share/godot/export_templates', '4.0.stable') | ||||
|       ) | ||||
|       expect(getExportTemplatePath('4.0.0', getPlatform('win32'), false)).toEqual( | ||||
|         path.join(os.homedir(), 'AppData/Roaming/Godot/export_templates', '4.0.stable') | ||||
|               ) | ||||
|       expect(getExportTemplatePath('4.0.0', getPlatform('darwin'), false)).toEqual( | ||||
|         path.join(os.homedir(), '/Library/Application Support/Godot/export_templates', '4.0.stable') | ||||
|       ) | ||||
|     }) | ||||
|     test('3.5.1', () => { | ||||
|       expect(getExportTemplatePath('3.5.1', getPlatform('linux'), false)).toEqual( | ||||
|         path.join(os.homedir(), '.local/share/godot/templates', '3.5.1.stable') | ||||
|       ) | ||||
|       expect(getExportTemplatePath('3.5.1', getPlatform('win32'), false)).toEqual( | ||||
|         path.join(os.homedir(), 'AppData/Roaming/Godot/templates', '3.5.1.stable') | ||||
|               ) | ||||
|       expect(getExportTemplatePath('3.5.1', getPlatform('darwin'), false)).toEqual( | ||||
|         path.join(os.homedir(), '/Library/Application Support/Godot/templates', '3.5.1.stable') | ||||
|       ) | ||||
|     }) | ||||
|     test('3.5.0', () => { | ||||
|       expect(getExportTemplatePath('3.5.0', getPlatform('linux'), false)).toEqual( | ||||
|         path.join(os.homedir(), '.local/share/godot/templates', '3.5.stable') | ||||
|       ) | ||||
|       expect(getExportTemplatePath('3.5.0', getPlatform('win32'), false)).toEqual( | ||||
|         path.join(os.homedir(), 'AppData/Roaming/Godot/templates', '3.5.stable') | ||||
|               ) | ||||
|       expect(getExportTemplatePath('3.5.0', getPlatform('darwin'), false)).toEqual( | ||||
|         path.join(os.homedir(), '/Library/Application Support/Godot/templates', '3.5.stable') | ||||
|       ) | ||||
|     }) | ||||
|   }) | ||||
| }) | ||||
|  | ||||
							
								
								
									
										94
									
								
								dist/index.js
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										94
									
								
								dist/index.js
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -66,10 +66,13 @@ function run(platform = undefined) { | ||||
|         const downloadsDir = path_1.default.join(userDir, downloadsRelativePath); | ||||
|         const installationDir = path_1.default.join(userDir, pathRelative); | ||||
|         const versionName = (0, utils_1.getGodotFilenameFromVersionString)(version, platform, useDotnet); | ||||
|         const godotUrl = (0, utils_1.getGodotUrl)(version, platform, useDotnet); | ||||
|         const godotUrl = (0, utils_1.getGodotUrl)(version, platform, useDotnet, false); | ||||
|         const godotDownloadPath = path_1.default.join(downloadsDir, `${versionName}.zip`); | ||||
|         const godotInstallationPath = platform.getUnzippedPath(installationDir, versionName, useDotnet); | ||||
|         const binDir = path_1.default.join(userDir, binRelativePath); | ||||
|         const exportTemplateUrl = (0, utils_1.getGodotUrl)(version, platform, useDotnet, true); | ||||
|         const exportTemplatePath = (0, utils_1.getExportTemplatePath)(version, platform, useDotnet); | ||||
|         const exportTemplateDownloadPath = path_1.default.join(downloadsDir, 'export_templates.zip'); | ||||
|         // Log values
 | ||||
|         core.startGroup('🤖 Godot Action Inputs'); | ||||
|         core.info(`🤖 Godot version: ${version}`); | ||||
| @ -81,6 +84,9 @@ function run(platform = undefined) { | ||||
|         core.info(`📥 Godot download path: ${godotDownloadPath}`); | ||||
|         core.info(`📦 Godot installation directory: ${installationDir}`); | ||||
|         core.info(`🤖 Godot installation path: ${godotInstallationPath}`); | ||||
|         core.info(`🤖 Export Template url: ${exportTemplateUrl}`); | ||||
|         core.info(`📥 Export Template download path: ${exportTemplateDownloadPath}`); | ||||
|         core.info(`🤖 Export Template Path: ${exportTemplatePath}`); | ||||
|         core.info(`📂 Bin directory: ${binDir}`); | ||||
|         core.info(`🤖 GodotSharp release: ${godotSharpRelease}`); | ||||
|         core.endGroup(); | ||||
| @ -94,7 +100,7 @@ function run(platform = undefined) { | ||||
|             core.endGroup(); | ||||
|             // See if Godot is already installed.
 | ||||
|             core.startGroup(`🤔 Checking if Godot is already in cache...`); | ||||
|             const cached = yield cache.restoreCache([godotInstallationPath], godotUrl); | ||||
|             const cached = yield cache.restoreCache([godotInstallationPath, exportTemplatePath], godotUrl); | ||||
|             let executables; | ||||
|             if (!cached) { | ||||
|                 // Download Godot
 | ||||
| @ -104,19 +110,34 @@ function run(platform = undefined) { | ||||
|                 const godotDownloadedPath = yield toolsCache.downloadTool(godotUrl, godotDownloadPath); | ||||
|                 core.info(`✅ Godot downloaded to ${godotDownloadedPath}`); | ||||
|                 core.endGroup(); | ||||
|                 core.startGroup(`📥 Downloading Export Templates to ${exportTemplateDownloadPath}...`); | ||||
|                 const templateDownloadedPath = yield toolsCache.downloadTool(exportTemplateUrl, exportTemplateDownloadPath); | ||||
|                 core.info(`✅ Export Templates downloaded to ${templateDownloadedPath}`); | ||||
|                 core.endGroup(); | ||||
|                 // Extract Godot
 | ||||
|                 core.startGroup(`📦 Extracting Godot to ${installationDir}...`); | ||||
|                 const godotExtractedPath = yield toolsCache.extractZip(godotDownloadedPath, installationDir); | ||||
|                 core.info(`✅ Godot extracted to ${godotExtractedPath}`); | ||||
|                 core.endGroup(); | ||||
|                 // Show extracted files recursively and list executables.
 | ||||
|                 // Show extracted Godot files recursively and list executables.
 | ||||
|                 core.startGroup(`📄 Showing extracted files recursively...`); | ||||
|                 executables = yield (0, utils_1.findExecutablesRecursively)(platform, installationDir, ''); | ||||
|                 core.info(`✅ Files shown`); | ||||
|                 core.endGroup(); | ||||
|                 core.startGroup(`📦 Extracting Export Templates to ${exportTemplatePath}...`); | ||||
|                 const exportTemplateExtractedPath = yield toolsCache.extractZip(templateDownloadedPath, path_1.default.dirname(exportTemplatePath)); | ||||
|                 core.info(`✅ Export Templates extracted to ${exportTemplateExtractedPath}`); | ||||
|                 fs.renameSync(path_1.default.join(exportTemplateExtractedPath, 'templates'), exportTemplatePath); | ||||
|                 core.info(`✅ ${path_1.default.join(path_1.default.dirname(exportTemplateExtractedPath), 'templates')} moved to ${exportTemplatePath}`); | ||||
|                 core.endGroup(); | ||||
|                 // Show extracted Export Template files recursively
 | ||||
|                 core.startGroup(`📄 Showing extracted files recursively...`); | ||||
|                 yield (0, utils_1.findExecutablesRecursively)(platform, exportTemplatePath, ''); | ||||
|                 core.info(`✅ Files shown`); | ||||
|                 core.endGroup(); | ||||
|                 // Save extracted Godot contents to cache
 | ||||
|                 core.startGroup(`💾 Saving extracted Godot download to cache...`); | ||||
|                 yield cache.saveCache([godotInstallationPath], godotUrl); | ||||
|                 yield cache.saveCache([godotInstallationPath, exportTemplatePath], godotUrl); | ||||
|                 core.info(`✅ Godot saved to cache`); | ||||
|                 core.endGroup(); | ||||
|             } | ||||
| @ -125,6 +146,7 @@ function run(platform = undefined) { | ||||
|                 core.endGroup(); | ||||
|                 core.startGroup(`📄 Showing cached files recursively...`); | ||||
|                 executables = yield (0, utils_1.findExecutablesRecursively)(platform, installationDir, ''); | ||||
|                 yield (0, utils_1.findExecutablesRecursively)(platform, exportTemplatePath, ''); | ||||
|                 core.info(`✅ Files shown`); | ||||
|                 core.endGroup(); | ||||
|             } | ||||
| @ -233,11 +255,15 @@ var __importDefault = (this && this.__importDefault) || function (mod) { | ||||
|     return (mod && mod.__esModule) ? mod : { "default": mod }; | ||||
| }; | ||||
| Object.defineProperty(exports, "__esModule", ({ value: true })); | ||||
| exports.findExecutablesRecursively = exports.getPlatform = exports.getGodotFilenameFromVersionString = exports.getGodotFilename = exports.getGodotUrl = exports.parseVersion = exports.MacOS = exports.Windows = exports.Linux = void 0; | ||||
| exports.findExecutablesRecursively = exports.getPlatform = exports.getGodotFilenameFromVersionString = exports.getGodotFilenameBase = exports.getGodotFilename = exports.getExportTemplatePath = exports.getGodotUrl = exports.parseVersion = exports.MacOS = exports.Windows = exports.Linux = void 0; | ||||
| const core = __importStar(__nccwpck_require__(2186)); | ||||
| const fs = __importStar(__nccwpck_require__(7147)); | ||||
| const path_1 = __importDefault(__nccwpck_require__(1017)); | ||||
| const os_1 = __importDefault(__nccwpck_require__(2037)); | ||||
| class Linux { | ||||
|     constructor() { | ||||
|         this.GODOT_EXPORT_TEMPLATE_BASE_PATH = path_1.default.join(os_1.default.homedir(), '.local/share/godot'); | ||||
|     } | ||||
|     godotFilenameSuffix(useDotnet) { | ||||
|         if (useDotnet) { | ||||
|             return '_mono_linux_x86_64'; | ||||
| @ -253,6 +279,9 @@ class Linux { | ||||
| } | ||||
| exports.Linux = Linux; | ||||
| class Windows { | ||||
|     constructor() { | ||||
|         this.GODOT_EXPORT_TEMPLATE_BASE_PATH = path_1.default.join(os_1.default.homedir(), '\\AppData\\Roaming\\Godot'); | ||||
|     } | ||||
|     godotFilenameSuffix(useDotnet) { | ||||
|         if (useDotnet) { | ||||
|             return '_mono_win64'; | ||||
| @ -268,6 +297,9 @@ class Windows { | ||||
| } | ||||
| exports.Windows = Windows; | ||||
| class MacOS { | ||||
|     constructor() { | ||||
|         this.GODOT_EXPORT_TEMPLATE_BASE_PATH = path_1.default.join(os_1.default.homedir(), '/Library/Application Support/Godot/'); | ||||
|     } | ||||
|     godotFilenameSuffix(useDotnet) { | ||||
|         return `${useDotnet ? '_mono' : ''}_macos.universal`; | ||||
|     } | ||||
| @ -305,15 +337,15 @@ exports.parseVersion = parseVersion; | ||||
|  * @param versionString Version string. | ||||
|  * @param platform Current platform instance. | ||||
|  * @param useDotnet True to use the .NET-enabled version of Godot. | ||||
|  * @param isTemplate True to return the url for the template | ||||
|  * @returns Godot binary download url. | ||||
|  */ | ||||
| function getGodotUrl(versionString, platform, useDotnet) { | ||||
| function getGodotUrl(versionString, platform, useDotnet, isTemplate) { | ||||
|     const version = parseVersion(versionString); | ||||
|     const major = version.major; | ||||
|     const minor = version.minor; | ||||
|     const patch = version.patch; | ||||
|     const label = version.label.replace('.', ''); | ||||
|     const filename = getGodotFilename(version, platform, useDotnet); | ||||
|     let url = `${GODOT_URL_PREFIX + major}.${minor}`; | ||||
|     if (patch !== '' && patch !== '0') { | ||||
|         url += `.${patch}`; | ||||
| @ -322,16 +354,46 @@ function getGodotUrl(versionString, platform, useDotnet) { | ||||
|     if (label !== '') { | ||||
|         url += `${label}/`; | ||||
|     } | ||||
|     if (useDotnet) { | ||||
|         url += `mono/${filename}.zip`; | ||||
|     } | ||||
|     else { | ||||
|         url += `${filename}.zip`; | ||||
|     } | ||||
|     return url; | ||||
|     if (useDotnet) | ||||
|         url += `mono/`; | ||||
|     if (!isTemplate) | ||||
|         return `${url}${getGodotFilename(version, platform, useDotnet)}.zip`; | ||||
|     return `${url}${getGodotFilenameBase(version)}${useDotnet ? '_mono' : ''}_export_templates.tpz`; | ||||
| } | ||||
| exports.getGodotUrl = getGodotUrl; | ||||
| /** | ||||
|  * Returns the Godot export template local path | ||||
|  * @param versionString Version string. | ||||
|  * @param platform Current platform instance. | ||||
|  * @param useDotnet True to use the .NET-enabled version of Godot. | ||||
|  * @returns export template local path | ||||
|  */ | ||||
| function getExportTemplatePath(versionString, platform, useDotnet) { | ||||
|     const version = parseVersion(versionString); | ||||
|     const major = version.major; | ||||
|     const minor = version.minor; | ||||
|     const patch = version.patch; | ||||
|     const label = version.label.replace('.', ''); | ||||
|     let folderName = `${major}.${minor}`; | ||||
|     if (patch !== '' && patch !== '0') { | ||||
|         folderName += `.${patch}`; | ||||
|     } | ||||
|     if (label !== '') { | ||||
|         folderName += `.${label}`; | ||||
|     } | ||||
|     else { | ||||
|         folderName += '.stable'; | ||||
|     } | ||||
|     if (useDotnet) | ||||
|         folderName += '.mono'; | ||||
|     return path_1.default.join(platform.GODOT_EXPORT_TEMPLATE_BASE_PATH, version.major === '4' ? 'export_templates' : 'templates', folderName); | ||||
| } | ||||
| exports.getExportTemplatePath = getExportTemplatePath; | ||||
| function getGodotFilename(version, platform, useDotnet) { | ||||
|     return getGodotFilenameBase(version) + platform.godotFilenameSuffix(useDotnet); | ||||
| } | ||||
| exports.getGodotFilename = getGodotFilename; | ||||
| function getGodotFilenameBase(version) { | ||||
|     const major = version.major; | ||||
|     const minor = version.minor; | ||||
|     const patch = version.patch; | ||||
| @ -349,9 +411,9 @@ function getGodotFilename(version, platform, useDotnet) { | ||||
|     else { | ||||
|         filename += '-stable'; | ||||
|     } | ||||
|     return filename + platform.godotFilenameSuffix(useDotnet); | ||||
|     return filename; | ||||
| } | ||||
| exports.getGodotFilename = getGodotFilename; | ||||
| exports.getGodotFilenameBase = getGodotFilenameBase; | ||||
| function getGodotFilenameFromVersionString(versionString, platform, useDotnet) { | ||||
|     return getGodotFilename(parseVersion(versionString), platform, useDotnet); | ||||
| } | ||||
|  | ||||
							
								
								
									
										2
									
								
								dist/index.js.map
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								dist/index.js.map
									
									
									
										generated
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										64
									
								
								src/main.ts
									
									
									
									
									
								
							
							
						
						
									
										64
									
								
								src/main.ts
									
									
									
									
									
								
							| @ -7,6 +7,7 @@ import path from 'path' | ||||
| 
 | ||||
| import { | ||||
|   findExecutablesRecursively, | ||||
|   getExportTemplatePath, | ||||
|   getGodotFilenameFromVersionString, | ||||
|   getGodotUrl, | ||||
|   getPlatform, | ||||
| @ -35,7 +36,7 @@ async function run(platform: Platform | undefined = undefined): Promise<void> { | ||||
|     platform, | ||||
|     useDotnet | ||||
|   ) | ||||
|   const godotUrl = getGodotUrl(version, platform, useDotnet) | ||||
|   const godotUrl = getGodotUrl(version, platform, useDotnet, false) | ||||
|   const godotDownloadPath = path.join(downloadsDir, `${versionName}.zip`) | ||||
|   const godotInstallationPath = platform.getUnzippedPath( | ||||
|     installationDir, | ||||
| @ -44,6 +45,13 @@ async function run(platform: Platform | undefined = undefined): Promise<void> { | ||||
|   ) | ||||
|   const binDir = path.join(userDir, binRelativePath) | ||||
| 
 | ||||
|   const exportTemplateUrl = getGodotUrl(version, platform, useDotnet, true) | ||||
|   const exportTemplatePath = getExportTemplatePath(version, platform, useDotnet) | ||||
|   const exportTemplateDownloadPath = path.join( | ||||
|     downloadsDir, | ||||
|     'export_templates.zip' | ||||
|   ) | ||||
| 
 | ||||
|   // Log values
 | ||||
|   core.startGroup('🤖 Godot Action Inputs') | ||||
|   core.info(`🤖 Godot version: ${version}`) | ||||
| @ -55,6 +63,9 @@ async function run(platform: Platform | undefined = undefined): Promise<void> { | ||||
|   core.info(`📥 Godot download path: ${godotDownloadPath}`) | ||||
|   core.info(`📦 Godot installation directory: ${installationDir}`) | ||||
|   core.info(`🤖 Godot installation path: ${godotInstallationPath}`) | ||||
|   core.info(`🤖 Export Template url: ${exportTemplateUrl}`) | ||||
|   core.info(`📥 Export Template download path: ${exportTemplateDownloadPath}`) | ||||
|   core.info(`🤖 Export Template Path: ${exportTemplatePath}`) | ||||
|   core.info(`📂 Bin directory: ${binDir}`) | ||||
|   core.info(`🤖 GodotSharp release: ${godotSharpRelease}`) | ||||
|   core.endGroup() | ||||
| @ -70,7 +81,10 @@ async function run(platform: Platform | undefined = undefined): Promise<void> { | ||||
| 
 | ||||
|     // See if Godot is already installed.
 | ||||
|     core.startGroup(`🤔 Checking if Godot is already in cache...`) | ||||
|     const cached = await cache.restoreCache([godotInstallationPath], godotUrl) | ||||
|     const cached = await cache.restoreCache( | ||||
|       [godotInstallationPath, exportTemplatePath], | ||||
|       godotUrl | ||||
|     ) | ||||
| 
 | ||||
|     let executables: string[] | ||||
|     if (!cached) { | ||||
| @ -86,6 +100,16 @@ async function run(platform: Platform | undefined = undefined): Promise<void> { | ||||
|       core.info(`✅ Godot downloaded to ${godotDownloadedPath}`) | ||||
|       core.endGroup() | ||||
| 
 | ||||
|       core.startGroup( | ||||
|         `📥 Downloading Export Templates to ${exportTemplateDownloadPath}...` | ||||
|       ) | ||||
|       const templateDownloadedPath = await toolsCache.downloadTool( | ||||
|         exportTemplateUrl, | ||||
|         exportTemplateDownloadPath | ||||
|       ) | ||||
|       core.info(`✅ Export Templates downloaded to ${templateDownloadedPath}`) | ||||
|       core.endGroup() | ||||
| 
 | ||||
|       // Extract Godot
 | ||||
|       core.startGroup(`📦 Extracting Godot to ${installationDir}...`) | ||||
|       const godotExtractedPath = await toolsCache.extractZip( | ||||
| @ -95,7 +119,7 @@ async function run(platform: Platform | undefined = undefined): Promise<void> { | ||||
|       core.info(`✅ Godot extracted to ${godotExtractedPath}`) | ||||
|       core.endGroup() | ||||
| 
 | ||||
|       // Show extracted files recursively and list executables.
 | ||||
|       // Show extracted Godot files recursively and list executables.
 | ||||
|       core.startGroup(`📄 Showing extracted files recursively...`) | ||||
|       executables = await findExecutablesRecursively( | ||||
|         platform, | ||||
| @ -105,9 +129,40 @@ async function run(platform: Platform | undefined = undefined): Promise<void> { | ||||
|       core.info(`✅ Files shown`) | ||||
|       core.endGroup() | ||||
| 
 | ||||
|       core.startGroup( | ||||
|         `📦 Extracting Export Templates to ${exportTemplatePath}...` | ||||
|       ) | ||||
|       const exportTemplateExtractedPath = await toolsCache.extractZip( | ||||
|         templateDownloadedPath, | ||||
|         path.dirname(exportTemplatePath) | ||||
|       ) | ||||
|       core.info( | ||||
|         `✅ Export Templates extracted to ${exportTemplateExtractedPath}` | ||||
|       ) | ||||
|       fs.renameSync( | ||||
|         path.join(exportTemplateExtractedPath, 'templates'), | ||||
|         exportTemplatePath | ||||
|       ) | ||||
|       core.info( | ||||
|         `✅ ${path.join( | ||||
|           path.dirname(exportTemplateExtractedPath), | ||||
|           'templates' | ||||
|         )} moved to ${exportTemplatePath}` | ||||
|       ) | ||||
|       core.endGroup() | ||||
| 
 | ||||
|       // Show extracted Export Template files recursively
 | ||||
|       core.startGroup(`📄 Showing extracted files recursively...`) | ||||
|       await findExecutablesRecursively(platform, exportTemplatePath, '') | ||||
|       core.info(`✅ Files shown`) | ||||
|       core.endGroup() | ||||
| 
 | ||||
|       // Save extracted Godot contents to cache
 | ||||
|       core.startGroup(`💾 Saving extracted Godot download to cache...`) | ||||
|       await cache.saveCache([godotInstallationPath], godotUrl) | ||||
|       await cache.saveCache( | ||||
|         [godotInstallationPath, exportTemplatePath], | ||||
|         godotUrl | ||||
|       ) | ||||
|       core.info(`✅ Godot saved to cache`) | ||||
|       core.endGroup() | ||||
|     } else { | ||||
| @ -120,6 +175,7 @@ async function run(platform: Platform | undefined = undefined): Promise<void> { | ||||
|         installationDir, | ||||
|         '' | ||||
|       ) | ||||
|       await findExecutablesRecursively(platform, exportTemplatePath, '') | ||||
|       core.info(`✅ Files shown`) | ||||
|       core.endGroup() | ||||
|     } | ||||
|  | ||||
							
								
								
									
										84
									
								
								src/utils.ts
									
									
									
									
									
								
							
							
						
						
									
										84
									
								
								src/utils.ts
									
									
									
									
									
								
							| @ -1,6 +1,7 @@ | ||||
| import * as core from '@actions/core' | ||||
| import * as fs from 'fs' | ||||
| import path from 'path' | ||||
| import os from 'os' | ||||
| 
 | ||||
| export interface Platform { | ||||
|   /** Godot installation filename suffix. */ | ||||
| @ -21,9 +22,16 @@ export interface Platform { | ||||
|     versionName: string, | ||||
|     useDotnet: boolean | ||||
|   ): string | ||||
| 
 | ||||
|   GODOT_EXPORT_TEMPLATE_BASE_PATH: string | ||||
| } | ||||
| 
 | ||||
| export class Linux implements Platform { | ||||
|   GODOT_EXPORT_TEMPLATE_BASE_PATH = path.join( | ||||
|     os.homedir(), | ||||
|     '.local/share/godot' | ||||
|   ) | ||||
| 
 | ||||
|   godotFilenameSuffix(useDotnet: boolean): string { | ||||
|     if (useDotnet) { | ||||
|       return '_mono_linux_x86_64' | ||||
| @ -43,6 +51,11 @@ export class Linux implements Platform { | ||||
| } | ||||
| 
 | ||||
| export class Windows implements Platform { | ||||
|   GODOT_EXPORT_TEMPLATE_BASE_PATH = path.join( | ||||
|     os.homedir(), | ||||
|     '\\AppData\\Roaming\\Godot' | ||||
|   ) | ||||
| 
 | ||||
|   godotFilenameSuffix(useDotnet: boolean): string { | ||||
|     if (useDotnet) { | ||||
|       return '_mono_win64' | ||||
| @ -62,6 +75,11 @@ export class Windows implements Platform { | ||||
| } | ||||
| 
 | ||||
| export class MacOS implements Platform { | ||||
|   GODOT_EXPORT_TEMPLATE_BASE_PATH = path.join( | ||||
|     os.homedir(), | ||||
|     '/Library/Application Support/Godot/' | ||||
|   ) | ||||
| 
 | ||||
|   godotFilenameSuffix(useDotnet: boolean): string { | ||||
|     return `${useDotnet ? '_mono' : ''}_macos.universal` | ||||
|   } | ||||
| @ -119,9 +137,48 @@ export function parseVersion(version: string): SemanticVersion { | ||||
|  * @param versionString Version string. | ||||
|  * @param platform Current platform instance. | ||||
|  * @param useDotnet True to use the .NET-enabled version of Godot. | ||||
|  * @param isTemplate True to return the url for the template | ||||
|  * @returns Godot binary download url. | ||||
|  */ | ||||
| export function getGodotUrl( | ||||
|   versionString: string, | ||||
|   platform: Platform, | ||||
|   useDotnet: boolean, | ||||
|   isTemplate: boolean | ||||
| ): string { | ||||
|   const version = parseVersion(versionString) | ||||
|   const major = version.major | ||||
|   const minor = version.minor | ||||
|   const patch = version.patch | ||||
|   const label = version.label.replace('.', '') | ||||
| 
 | ||||
|   let url = `${GODOT_URL_PREFIX + major}.${minor}` | ||||
|   if (patch !== '' && patch !== '0') { | ||||
|     url += `.${patch}` | ||||
|   } | ||||
|   url += '/' | ||||
|   if (label !== '') { | ||||
|     url += `${label}/` | ||||
|   } | ||||
| 
 | ||||
|   if (useDotnet) url += `mono/` | ||||
| 
 | ||||
|   if (!isTemplate) | ||||
|     return `${url}${getGodotFilename(version, platform, useDotnet)}.zip` | ||||
| 
 | ||||
|   return `${url}${getGodotFilenameBase(version)}${ | ||||
|     useDotnet ? '_mono' : '' | ||||
|   }_export_templates.tpz` | ||||
| } | ||||
| 
 | ||||
| /** | ||||
|  * Returns the Godot export template local path | ||||
|  * @param versionString Version string. | ||||
|  * @param platform Current platform instance. | ||||
|  * @param useDotnet True to use the .NET-enabled version of Godot. | ||||
|  * @returns export template local path | ||||
|  */ | ||||
| export function getExportTemplatePath( | ||||
|   versionString: string, | ||||
|   platform: Platform, | ||||
|   useDotnet: boolean | ||||
| @ -132,23 +189,22 @@ export function getGodotUrl( | ||||
|   const patch = version.patch | ||||
|   const label = version.label.replace('.', '') | ||||
| 
 | ||||
|   const filename = getGodotFilename(version, platform, useDotnet) | ||||
| 
 | ||||
|   let url = `${GODOT_URL_PREFIX + major}.${minor}` | ||||
|   let folderName = `${major}.${minor}` | ||||
|   if (patch !== '' && patch !== '0') { | ||||
|     url += `.${patch}` | ||||
|     folderName += `.${patch}` | ||||
|   } | ||||
|   url += '/' | ||||
|   if (label !== '') { | ||||
|     url += `${label}/` | ||||
|   } | ||||
|   if (useDotnet) { | ||||
|     url += `mono/${filename}.zip` | ||||
|     folderName += `.${label}` | ||||
|   } else { | ||||
|     url += `${filename}.zip` | ||||
|     folderName += '.stable' | ||||
|   } | ||||
|   if (useDotnet) folderName += '.mono' | ||||
| 
 | ||||
|   return url | ||||
|   return path.join( | ||||
|     platform.GODOT_EXPORT_TEMPLATE_BASE_PATH, | ||||
|     version.major === '4' ? 'export_templates' : 'templates', | ||||
|     folderName | ||||
|   ) | ||||
| } | ||||
| 
 | ||||
| export function getGodotFilename( | ||||
| @ -156,6 +212,10 @@ export function getGodotFilename( | ||||
|   platform: Platform, | ||||
|   useDotnet: boolean | ||||
| ): string { | ||||
|   return getGodotFilenameBase(version) + platform.godotFilenameSuffix(useDotnet) | ||||
| } | ||||
| 
 | ||||
| export function getGodotFilenameBase(version: SemanticVersion): string { | ||||
|   const major = version.major | ||||
|   const minor = version.minor | ||||
|   const patch = version.patch | ||||
| @ -175,7 +235,7 @@ export function getGodotFilename( | ||||
|     filename += '-stable' | ||||
|   } | ||||
| 
 | ||||
|   return filename + platform.godotFilenameSuffix(useDotnet) | ||||
|   return filename | ||||
| } | ||||
| 
 | ||||
| export function getGodotFilenameFromVersionString( | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user