mirror of
				https://github.com/SteamDeckHomebrew/decky-plugin-template.git
				synced 2025-11-04 00:02:25 -06:00 
			
		
		
		
	Reduce entry of four passwords > one password for deploy task
This commit is contained in:
		
					parent
					
						
							
								8262602460
							
						
					
				
			
			
				commit
				
					
						fd92820a43
					
				
			
		
					 2 changed files with 70 additions and 27 deletions
				
			
		
							
								
								
									
										67
									
								
								.vscode/deploy.sh
									
										
									
									
										vendored
									
									
										Executable file
									
								
							
							
						
						
									
										67
									
								
								.vscode/deploy.sh
									
										
									
									
										vendored
									
									
										Executable file
									
								
							| 
						 | 
					@ -0,0 +1,67 @@
 | 
				
			||||||
 | 
					#!/bin/bash
 | 
				
			||||||
 | 
					# ./.vscode/deploy.sh (Single Login Version)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Exit immediately if a command exits with a non-zero status.
 | 
				
			||||||
 | 
					set -e
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# --- Configuration Variables (7 total arguments) ---
 | 
				
			||||||
 | 
					DECK_IP="$1"
 | 
				
			||||||
 | 
					DECK_PORT="$2"
 | 
				
			||||||
 | 
					DECK_USER="$3"
 | 
				
			||||||
 | 
					DECK_PASS="$4"
 | 
				
			||||||
 | 
					DECK_DIR="$5"
 | 
				
			||||||
 | 
					PLUGIN_NAME="$6"
 | 
				
			||||||
 | 
					PLUGIN_ZIP_PATH="$7" # Local path: e.g., "out/Example Plugin.zip"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# --- Remote Path Setup ---
 | 
				
			||||||
 | 
					REMOTE_PLUGINS_DIR="${DECK_DIR}/homebrew/plugins"
 | 
				
			||||||
 | 
					# The folder name needs spaces replaced with hyphens
 | 
				
			||||||
 | 
					REMOTE_PLUGIN_FOLDER_NAME="$(echo "${PLUGIN_NAME}" | sed 's/ /-/g')"
 | 
				
			||||||
 | 
					REMOTE_PLUGIN_PATH="${REMOTE_PLUGINS_DIR}/${REMOTE_PLUGIN_FOLDER_NAME}"
 | 
				
			||||||
 | 
					REMOTE_ZIP_FILE="${REMOTE_PLUGINS_DIR}/${PLUGIN_NAME}.zip"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					echo "Deploying to ${DECK_IP} (One SSH login required)..."
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# --- VALIDATION ---
 | 
				
			||||||
 | 
					if [ ! -e "${PLUGIN_ZIP_PATH}" ]; then
 | 
				
			||||||
 | 
					    echo "ERROR: Source ZIP file not found locally! Expected path: [${PLUGIN_ZIP_PATH}]"
 | 
				
			||||||
 | 
					    echo "Please ensure your build task ran successfully."
 | 
				
			||||||
 | 
					    exit 1
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					# ------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# 1. Execute all steps in ONE single SSH connection:
 | 
				
			||||||
 | 
					#    a) Pipe the ZIP file content over the SSH connection (cat ...)
 | 
				
			||||||
 | 
					#    b) On the remote side, use 'tee' to save the stream to the final zip location.
 | 
				
			||||||
 | 
					#    c) Immediately after the transfer (in the same SSH session), execute the sudo commands.
 | 
				
			||||||
 | 
					echo "--- Transferring file and executing extraction (Enter SSH password once)..."
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ssh -p "${DECK_PORT}" "${DECK_USER}@${DECK_IP}" "
 | 
				
			||||||
 | 
					    # 1. Pass the password to sudo and cache it for the entire session.
 | 
				
			||||||
 | 
					    # 2. Use 'tee' to write the incoming stream (the zip file) to its final location.
 | 
				
			||||||
 | 
					    # 3. Chain the subsequent extraction/permissions commands with the cached sudo password.
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    echo \"${DECK_PASS}\" | sudo -S sh -c '
 | 
				
			||||||
 | 
					        # The transfer destination needs write permissions first
 | 
				
			||||||
 | 
					        echo \"Applying write permissions to ${REMOTE_PLUGINS_DIR}/...\"
 | 
				
			||||||
 | 
					        chmod ug+w \"${REMOTE_PLUGINS_DIR}\"
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        # 'cat' on the local machine pipes the ZIP contents to this remote shell.
 | 
				
			||||||
 | 
					        # This remote shell uses 'tee' to write the contents to the zip file.
 | 
				
			||||||
 | 
					        # This MUST be the first command after sudo -S setup.
 | 
				
			||||||
 | 
					        tee \"${REMOTE_ZIP_FILE}\" > /dev/null
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        # Now run the rest of the steps using the cached sudo privilege:
 | 
				
			||||||
 | 
					        echo \"Creating and extracting ${REMOTE_PLUGIN_PATH}...\"
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        # Create target dir, change ownership, and extract
 | 
				
			||||||
 | 
					        mkdir -m 755 -p \"${REMOTE_PLUGIN_PATH}\" &&
 | 
				
			||||||
 | 
					        chown ${DECK_USER}:${DECK_USER} \"${REMOTE_PLUGIN_PATH}\" &&
 | 
				
			||||||
 | 
					        bsdtar -xzpf \"${REMOTE_ZIP_FILE}\" -C \"${REMOTE_PLUGIN_PATH}\" --strip-components=1 --fflags &&
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        # OPTIONAL: Remove the temporary ZIP file
 | 
				
			||||||
 | 
					        rm \"${REMOTE_ZIP_FILE}\"
 | 
				
			||||||
 | 
					    '
 | 
				
			||||||
 | 
					" < "${PLUGIN_ZIP_PATH}" # <--- This redirects the local file into the SSH process's standard input.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					echo "--- Deployment Complete! ---"
 | 
				
			||||||
							
								
								
									
										30
									
								
								.vscode/tasks.json
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										30
									
								
								.vscode/tasks.json
									
										
									
									
										vendored
									
									
								
							| 
						 | 
					@ -74,37 +74,13 @@
 | 
				
			||||||
            ],
 | 
					            ],
 | 
				
			||||||
            "problemMatcher": []
 | 
					            "problemMatcher": []
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        //DEPLOY TASKS
 | 
					 | 
				
			||||||
        //Copies the zip file of the built plugin to the plugins folder
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            "label": "copyzip",
 | 
					 | 
				
			||||||
            "detail": "Deploy plugin zip to deck",
 | 
					 | 
				
			||||||
            "type": "shell",
 | 
					 | 
				
			||||||
            "group": "none",
 | 
					 | 
				
			||||||
            "dependsOn": [
 | 
					 | 
				
			||||||
                "chmodplugins"
 | 
					 | 
				
			||||||
            ],
 | 
					 | 
				
			||||||
            "command": "rsync -azp --chmod=D0755,F0755 --rsh='ssh -p ${config:deckport} ${config:deckkey}' out/ ${config:deckuser}@${config:deckip}:${config:deckdir}/homebrew/plugins",
 | 
					 | 
				
			||||||
            "problemMatcher": []
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        //
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            "label": "extractzip",
 | 
					 | 
				
			||||||
            "detail": "",
 | 
					 | 
				
			||||||
            "type": "shell",
 | 
					 | 
				
			||||||
            "group": "none",
 | 
					 | 
				
			||||||
            "command": "echo '${config:deckdir}/homebrew/plugins/${config:pluginname}.zip' && ssh ${config:deckuser}@${config:deckip} -p ${config:deckport} ${config:deckkey} 'echo ${config:deckpass} | sudo -S mkdir -m 755 -p \"$(echo \"${config:deckdir}/homebrew/plugins/${config:pluginname}\" | sed \"s| |-|g\")\" && echo ${config:deckpass} | sudo -S chown ${config:deckuser}:${config:deckuser} \"$(echo \"${config:deckdir}/homebrew/plugins/${config:pluginname}\" | sed \"s| |-|g\")\" && echo ${config:deckpass} | sudo -S bsdtar -xzpf \"${config:deckdir}/homebrew/plugins/${config:pluginname}.zip\" -C \"$(echo \"${config:deckdir}/homebrew/plugins/${config:pluginname}\" | sed \"s| |-|g\")\" --strip-components=1 --fflags '",
 | 
					 | 
				
			||||||
            "problemMatcher": []
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        //"All-in-one" deploy task
 | 
					        //"All-in-one" deploy task
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            "label": "deploy",
 | 
					            "label": "deploy",
 | 
				
			||||||
            "dependsOrder": "sequence",
 | 
					            "type": "shell",
 | 
				
			||||||
            "group": "none",
 | 
					            "group": "none",
 | 
				
			||||||
            "dependsOn": [
 | 
					            "detail": "Deploy plugin zip to deck",
 | 
				
			||||||
                "copyzip",
 | 
					            "command": "${workspaceFolder}/.vscode/deploy.sh \"${config:deckip}\" \"${config:deckport}\" \"${config:deckuser}\" \"${config:deckpass}\" \"${config:deckdir}\" \"${config:pluginname}\" \"out/${config:pluginname}.zip\"",
 | 
				
			||||||
                "extractzip"
 | 
					 | 
				
			||||||
            ],
 | 
					 | 
				
			||||||
            "problemMatcher": []
 | 
					            "problemMatcher": []
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        //"All-in-on" build & deploy task
 | 
					        //"All-in-on" build & deploy task
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue