name: Reusable Deploy to Pterodactyl (Gitea) on: workflow_call: inputs: build-run-id: required: true type: string artifact-name: required: true type: string secrets: NODE1_PASSWORD: required: true NODE3_PASSWORD: required: true jobs: deploy: runs-on: ubuntu-latest env: REMOTE_TMP_DIR: "/root/tmp-plugins" PTERO_VOLUME_PATH: "/var/lib/pterodactyl/volumes" strategy: fail-fast: false matrix: include: - node_name: "Node 1" host: '193.123.103.129' port: '22' password: ${{ secrets.NODE1_PASSWORD }} - node_name: "Node 3" host: '148.116.109.49' port: '22' password: ${{ secrets.NODE3_PASSWORD }} steps: - name: šŸ“„ Baixar artefatos uses: actions/download-artifact@v3 with: name: ${{ inputs.artifact-name }} path: ./builds - name: šŸš€ Deploy para ${{ matrix.node_name }} shell: bash env: NODE_NAME: ${{ matrix.node_name }} NODE_HOST: ${{ matrix.host }} NODE_PORT: ${{ matrix.port }} NODE_PASS: ${{ matrix.password }} run: | set -e shopt -s globstar # Verificação silenciosa de senha (usando variĆ”vel de ambiente) if [ -z "$NODE_PASS" ]; then echo "āŒ ERRO: Password para $NODE_NAME nĆ£o configurada." exit 1 fi # Instalação silenciosa do sshpass if ! command -v sshpass &> /dev/null; then apt-get update -qq && apt-get install -y -qq sshpass &> /dev/null fi echo "šŸ”§ [$NODE_NAME] Preparando ambiente..." sshpass -p "$NODE_PASS" \ ssh -o StrictHostKeyChecking=no -p "$NODE_PORT" \ root@"$NODE_HOST" "mkdir -p ${{ env.REMOTE_TMP_DIR }}" for jar_file in builds/**/*.jar; do if [ -f "$jar_file" ]; then PLUGIN_NAME=$(basename "$jar_file") REMOTE_JAR_PATH="${{ env.REMOTE_TMP_DIR }}/${PLUGIN_NAME}" echo "šŸ“¤ [$NODE_NAME] Enviando: ${PLUGIN_NAME}" sshpass -p "$NODE_PASS" \ sftp -o StrictHostKeyChecking=no -P "$NODE_PORT" \ root@"$NODE_HOST" < /dev/null put "${jar_file}" "${REMOTE_JAR_PATH}" bye EOF echo "šŸ” [$NODE_NAME] Atualizando containers..." sshpass -p "$NODE_PASS" \ ssh -o StrictHostKeyChecking=no -p "$NODE_PORT" \ root@"$NODE_HOST" " find '${{ env.PTERO_VOLUME_PATH }}' -type f -path '*/plugins/${PLUGIN_NAME}' | while read -r plugin_path; do echo \" -> Atualizando: \${plugin_path}\" cp '${REMOTE_JAR_PATH}' \"\${plugin_path}\" server_id=\$(echo \"\${plugin_path}\" | cut -d'/' -f6) docker container restart \"\${server_id}\" &> /dev/null || true done rm -f '${REMOTE_JAR_PATH}' " fi done echo "āœ… [$NODE_NAME] ConcluĆ­do!"