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 run: | set -e shopt -s globstar # Verificação silenciosa de senha if [ -z "${{ matrix.password }}" ]; then echo "āŒ ERRO: Password para ${{ matrix.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 "šŸ”§ [${{ matrix.node_name }}] Preparando ambiente..." sshpass -p "${{ matrix.password }}" \ ssh -o StrictHostKeyChecking=no -p ${{ matrix.port }} \ root@${{ matrix.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 "šŸ“¤ [${{ matrix.node_name }}] Enviando: ${PLUGIN_NAME}" sshpass -p "${{ matrix.password }}" \ sftp -o StrictHostKeyChecking=no -P ${{ matrix.port }} \ root@${{ matrix.host }} < /dev/null put "${jar_file}" "${REMOTE_JAR_PATH}" bye EOF echo "šŸ” [${{ matrix.node_name }}] Atualizando containers..." sshpass -p "${{ matrix.password }}" \ ssh -o StrictHostKeyChecking=no -p ${{ matrix.port }} \ root@${{ matrix.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 "āœ… [${{ matrix.node_name }}] ConcluĆ­do!"