diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index aace06cfe..9fd6680e7 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -120,7 +120,60 @@ jobs: sudo apt-get install -y libfuse-dev fuse || true # Required for Python llfuse module sudo apt-get install -y libfuse3-dev fuse3 || true # Required for Python pyfuse3 module sudo apt-get install -y bash zsh fish # for shell completion tests - + sudo apt-get install -y rclone openssh-server curl + - name: Configure OpenSSH SFTP server (test only) + run: | + sudo mkdir -p /run/sshd + sudo useradd -m -s /bin/bash sftpuser || true + # Create SSH key for the CI user and authorize it for sftpuser + mkdir -p ~/.ssh + chmod 700 ~/.ssh + test -f ~/.ssh/id_ed25519 || ssh-keygen -t ed25519 -N '' -f ~/.ssh/id_ed25519 + sudo mkdir -p /home/sftpuser/.ssh + sudo chmod 700 /home/sftpuser/.ssh + sudo cp ~/.ssh/id_ed25519.pub /home/sftpuser/.ssh/authorized_keys + sudo chown -R sftpuser:sftpuser /home/sftpuser/.ssh + sudo chmod 600 /home/sftpuser/.ssh/authorized_keys + # Allow publickey auth and enable Subsystem sftp + sudo sed -i 's/^#\?PasswordAuthentication .*/PasswordAuthentication no/' /etc/ssh/sshd_config + sudo sed -i 's/^#\?PubkeyAuthentication .*/PubkeyAuthentication yes/' /etc/ssh/sshd_config + if ! grep -q '^Subsystem sftp' /etc/ssh/sshd_config; then echo 'Subsystem sftp /usr/lib/openssh/sftp-server' | sudo tee -a /etc/ssh/sshd_config; fi + # Ensure host keys exist to avoid slow generation on first sshd start + sudo ssh-keygen -A + # Start sshd (listen on default 22 inside runner) + sudo /usr/sbin/sshd -D & + # Add host key to known_hosts so paramiko trusts it + ssh-keyscan -H localhost 127.0.0.1 | tee -a ~/.ssh/known_hosts + # Start ssh-agent and add our key so paramiko can use the agent + eval "$(ssh-agent -s)" + ssh-add ~/.ssh/id_ed25519 + # Export SFTP test URL for tox via GITHUB_ENV + echo "BORG_TEST_SFTP_REPO=sftp://sftpuser@localhost:22/borg/sftp-repo" >> $GITHUB_ENV + - name: Install and configure MinIO S3 server (test only) + run: | + set -e + arch=$(uname -m) + case "$arch" in + x86_64|amd64) srv_url=https://dl.min.io/server/minio/release/linux-amd64/minio; cli_url=https://dl.min.io/client/mc/release/linux-amd64/mc ;; + aarch64|arm64) srv_url=https://dl.min.io/server/minio/release/linux-arm64/minio; cli_url=https://dl.min.io/client/mc/release/linux-arm64/mc ;; + *) echo "Unsupported arch: $arch"; exit 1 ;; + esac + curl -fsSL -o /usr/local/bin/minio "$srv_url" + curl -fsSL -o /usr/local/bin/mc "$cli_url" + sudo chmod +x /usr/local/bin/minio /usr/local/bin/mc + export PATH=/usr/local/bin:$PATH + # Start MinIO on :9000 with default credentials (minioadmin/minioadmin) + MINIO_DIR="$GITHUB_WORKSPACE/.minio-data" + MINIO_LOG="$GITHUB_WORKSPACE/.minio.log" + mkdir -p "$MINIO_DIR" + nohup minio server "$MINIO_DIR" --address ":9000" >"$MINIO_LOG" 2>&1 & + # Wait for MinIO port to be ready + for i in $(seq 1 60); do (echo > /dev/tcp/127.0.0.1/9000) >/dev/null 2>&1 && break; sleep 1; done + # Configure client and create bucket + mc alias set local http://127.0.0.1:9000 minioadmin minioadmin + mc mb --ignore-existing local/borg + # Export S3 test URL for tox via GITHUB_ENV + echo "BORG_TEST_S3_REPO=s3:minioadmin:minioadmin@http://127.0.0.1:9000/borg/s3-repo" >> $GITHUB_ENV - name: Install Python requirements run: | python -m pip install --upgrade pip setuptools wheel